Detect pending linux shutdown

12k views Asked by At

Since I install pending updates for my Ubuntu server as soon as possible, I have to restart my linux server quite often. I'm running an webapp on that server and would like to warn my users about the pending restart. Right now, I do this manually, adding an announcement before the restart, give them some time to finish their work, restart and remove the announcement.

I hope, shutdown -r +60 writes an file with all the information about the restart, which I can check on every access. Is there such a file? Would prefer a file in a virtual file system like /proc for performance reasons...

I'm running Ubuntu 10.04.2 LTS

5

There are 5 answers

2
8.8.8.8 On BEST ANSWER

If you are using systemd, the following command shows the scheduled shutdown info.

cat /run/systemd/shutdown/scheduled

Example of output:

USEC=1636410600000000
WARN_WALL=1
MODE=reboot

As remarked in a comment by @Björn, USEC is the timestamp in micro seconds.

You can convert it to a human friendly format dropping the last 6 figures and using date like this:

$ date -d @1636410600
Mon Nov  8 23:30:00 CET 2021
1
Kristina On

You could write a daemon that does the announcement when it catches the SIGINT / SIGQUIT signal.

0
TonyD On

The easiest solution I can envisage means writing a script to wrap the shutdown command, and in that script create a file that your web application can check for.

As far as I know, shutdown doesn't write a file to the underlying files system, although it does trigger broadcast messages warning of the shutdown, which I suppose you could write a program to intercept .. but the above solution seems the easiest.

Script example:

shutdown.bsh
touch /somefolder/somefile
shutdown -r $1

then check for 'somefile' in your web app.

You'd need to add a startup link that erased the 'somefile' otherwise it would still be there when the system comes up and the web app would always be telling your users it was about to shut down.

2
timurb On

You can simply check for running shutdown process:

if ps -C shutdown > /dev/null; then
  echo "Shutdown is pending"
else
  echo "Shutdown is not scheduled"
fi
3
akarapatis On

For newer linux distributions versions you might need to do:

busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager ScheduledShutdown

The method of how shutdown works has changed

Tried on: - Debian Stretch 9.6 - Ubuntu 18.04.1 LTS

References