lichess-org/fishnet

Add graceful shutdown to systemd unit

bharrisau opened this issue · 4 comments

It's a bit hacky to get around the lack of asynchronous stop commands. But I've got something like this to give a 5 minute window to the process to finish any remaining work.

[Service]
ExecStart=/home/fishnet/fishnet --auto-update --conf /home/fishnet/fishnet.ini run
ExecStop=/bin/kill -INT "$MAINPID"
ExecStop=/usr/bin/sh -c 'while kill -0 "$MAINPID" 2>/dev/null; do sleep 1; done'
KillMode=mixed
TimeoutStopSec=300

Generally such long timeouts for shutdown are not acceptable, so instead the default KillSignal=SIGTERM is used. This will cause a somewhat graceful shutdown, i.e., work won't be completed, but the server is notified.

The hack above can be simplified to:

KillMode=mixed
KillSignal=SIGINT
TimeoutStopSec=300

Ah, interesting. I didn't realize how nicely your snippet works: So it's immediate SIGINT, SIGTERM after the timeout, and then eventually SIGKILL if something went wrong?