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.
Linux
From Wikipedia, the free encyclopedia
Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).
Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.
Rules
- Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
- No misinformation
- No NSFW content
- No hate speech, bigotry, etc
Related Communities
Community icon by Alpár-Etele Méder, licensed under CC BY 3.0
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.
I think last has it, too, but I'm not sure.
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
For boot and power down, create a service to log it.
For the others, an elogind script might be what you look for.
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...)
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.
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)
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.