GitHub - ryran/reboot-guard: Block systemd-initiated poweroff/reboot/halt until configurable condition checks pass
Block systemd-initiated poweroff/reboot/halt until configurable condition checks pass
usage: rguard [-1 | -0] [-f FILE] [-F FILE] [-u UNIT] [-c CMD] [-a ARGS]
[-r COMMAND] [-h] [-i SEC] [-n] [-x]
[-v {debug,info,warning,error}] [-t]
Block systemd-initiated shutdown until configurable condition checks pass
SET AND QUIT:
Execute a single action with no condition checks.
-1, --install-guard Install reboot-guard and immediately exit
-0, --remove-guard Remove reboot-guard (if present) and immediately exit
CONFIGURE CONDITIONS:
Establish what condition checks must pass to allow shutdown.
Each option may be specified multiple times.
-f, --forbid-file FILE
Prevent shutdown while FILE exists
-F, --require-file FILE
Prevent shutdown until FILE exists
-u, --unit UNIT Prevent shutdown while systemd UNIT is active
-c, --cmd CMD Prevent shutdown while CMD exactly matches at least 1
running process
-a, --args ARGS Prevent shutdown while ARGS exactly matches the full
cmd+args of at least 1 running process
-r, --run COMMAND Prevent shutdown while execution of COMMAND fails;
prefix COMMAND with '!' to prevent shutdown while
execution succeeds (MORE: Prefix COMMAND with '@' to
execute it as a shell command, e.g., to use pipes '|'
or other logic; examples: '@cmd|cmd' or '!@cmd|cmd')
GENERAL OPTIONS:
-h, --help Show this help message and exit
-i, --interval SEC Modify the sleep interval between condition checks
(default: 60 seconds)
-n, --ignore-signals Ignore the most common signals (HUP, INT, QUIT, USR1,
USR2, TERM), in which case a graceful exit requires
the next option or else SIGKILL
-x, --exit-on-pass Exit (and remove reboot-guard) the first time all
condition checks pass
-v, --loglevel {debug,info,warning,error}
Specify minimum message type to print (default:
warning)
-t, --timestamps Enable timestamps in message output (not necessary if
running as systemd service)
EXAMPLES:
As mentioned above, all of the condition-checking options can be used
multiple times. All specified checks must pass to allow shutdown.
rguard --forbid-file /shutdown/prevented/if/this/file/exists
rguard --require-file /shutdown/prevented/until/this/file/exists
rguard --cmd some-cmd-name-which-when-running-prevents-shutdown
* e.g., 'bash' or 'firefox'
rguard --args 'syndaemon -i 1.0 -t -K -R'
* Prevent shutdown if this exact cmd + args are found running
rguard --run 'ping -c2 -w1 -W1 10.0.0.1'
* Allow shutdown only if single command (ping in this case) succeeds
rguard --run '!ping -c2 -w1 -W1 10.0.0.1'
* Allow shutdown only if single command FAILS
rguard --run '!findmnt /mnt'
* Allow shutdown if nothing mounted at mountpoint
rguard --run '@some_cmd | some_other_cmd; another_cmd'
* Allow shutdown only if last cmd in shell succeeds
* When using '@', full shell syntax is supported
* e.g.: '|', '&&', '||', ';', '>', '>>', '<', etc
rguard --run '!@lsof -i:ssh | grep -q ESTABLISHED'
* Allow shutdown only if shell commands FAIL
* In this example, only if there are no established ssh connections