Hi,
back in the rcX days I configured a backup system which blocks a system shutdown in a certain state (network and mounts still active) if a backup is still running. The init script looks like this:
...
case "$1" in
...
stop)
plymouth --ping
if [ $? -ne 0 ]; then
log_daemon_msg "waiting for running backup" "backup"
else
plymouth message --text="waiting for running backup"
fi
sleep 10
logger -t backup "rcS: trying to get lock..."
exec {FD}<>"$LOCKFILE"
{
logger -t backup "locked rsync_wrapper: waiting for lock"
flock ${FD}
}
logger -t backup "rcS: continue shutdown..."
plymouth message --text=""
plymouth --ping
if [ $? -ne 0 ]; then
log_daemon_msg "waiting for running backup" "backup"
else
plymouth message --text="waiting for running backup"
fi
sleep 10
logger -t backup "rcS: trying to get lock..."
exec {FD}<>"$LOCKFILE"
{
logger -t backup "locked rsync_wrapper: waiting for lock"
flock ${FD}
}
logger -t backup "rcS: continue shutdown..."
plymouth message --text=""
...
esac
esac
...
The strategy is to wait for a successful lock on a shared LOCKFILE.
Now, I want to solve this with systemd. I've read tons of documentation but I don't get it, all my experiments failed. I am using Linux Mint 21 "Vanessa", which is based on Ubunut 22.04.
I am looking for a solution which
* "pauses" a shutdown or reboot attempt as long as the LOCK cannot be obtained (which means the backup is still running)
* while the network connection (ethernet) is still active
* and all mounts (local, usb and cifs) are still active
* openssh-server still running
* The logging functionality (plymouth / log_daemon) would be nice. so the system should be allowed to shutdown to a stage where plymouth is already visible
Can you please help me?
Best regards
Henning