Easiest way to capture power states of machine? (Boot/Poweroff/Sleep/Wake)
from tetris11@lemmy.ml to linux@lemmy.ml on 06 Feb 15:13
https://lemmy.ml/post/25684854

I’m looking for a reliable way to log when my laptop is:

Currently I’m checking both the systemd-suspend and tlp systemctl services, but these don’t really feel very robust, and I don’t have TLP installed on all my machines.

Is there an easier way to do this, or a better systemctl unit that logs all the power states of my machine. Preferably laptop agnostic?

Laptop snippet so far:

journalctl --since -9days -u systemd-suspend -u tlp \
    | grep -P "Finish|Start|Stopped" | sed '/.*Finished TLP.*/d;
            s|Starting TLP.*|╭╴System Boot  |;
 s|Starting System Suspend.*|┤ · Sleep      |;
 s|Finished System Suspend.*|├ · Wake       |;
             s|Stopped TLP.*|╰╴Power Off    |;' \
    | sed -r 's|^(.*:[0-9]+)+:[0-9]+.*:(.*)|   \1 \2 |'

#linux

threaded - newest

just_another_person@lemmy.world on 06 Feb 15:33 next collapse

Are you asking about uptime monitoring on a remote host, or the actual last state of the machine once X happens via logged info on the machine?

If the former, you can add a hook that pings somewhere before X action takes place.

For the latter, it should be in dmesg, both going not and coming out of different states.

tetris11@lemmy.ml on 06 Feb 15:47 collapse

I guess uptime monitoring of any host, with specific timestamps for when the system is suspended/resumed.
(Yes I understand that a server ideally shouldn’t sleep)

eldavi@lemmy.ml on 06 Feb 16:35 collapse

in your shoes i would use a loop to iterate through journalctl’s up/down sessions getting the first and last lines of each and then use awk to printout the timestamps and sed to add in power state changes.

MonkderVierte@lemmy.ml on 07 Feb 13:10 next collapse

For boot and power down, create a service to log it.

For the others, an elogind script might be what you look for.

tetris11@lemmy.ml on 07 Feb 18:25 collapse

Hmm! I never considered checking to see what loginctl was doing

And yep I think you’re right, the most portable way of doing this is to maybe write my own service with hooks for OnBoot OnShutdown OnSleep OnWake (if that’s a systemctl hook…)

limelight79@lemm.ee on 08 Feb 13:54 collapse

I’m not clear on your use case here - the system obviously can’t report if it’s off. Initially I thought this was in the Home Assistant community, and I was going to suggest just pinging the machine at regular intervals from the HA system. That makes sense if you’re trying to monitor various systems.

tetris11@lemmy.ml on 08 Feb 14:58 collapse

It can report just before it’s shutting down. Hell, if I run shutdown -P 20:00 “OH WE GOIN DOWN” you bet your ass that I will get a wall message on every tty with that message at 8pm.

I’m just wondering how to reliably capture the shutdown messages without having to scan the entire system log. I just assumed that there would be one service file that I would have to check for these types of events, but apparently the best bet I have is the TLP service daemon which typically only runs on laptops.

limelight79@lemm.ee on 09 Feb 02:18 collapse

I think last has it, too, but I’m not sure.

tetris11@lemmy.ml on 09 Feb 20:57 collapse

Very good shout on last – I see the boot up and power down states very nicely described there. Sadly, no hibernate info is there, so I would still need to check journalctl for that info