According to this answer
and this bug report
one can simply drop a script in
/usr/lib/systemd/system-shutdown/
or for Debian in
/lib/systemd/system-shutdown/
to have it executed at reboot or shutdown. From
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html:
Immediately before executing the actual system halt/poweroff/reboot/kexec systemd-shutdown will run all executables in /usr/lib/systemd/system-shutdown/ and pass one arguments to them: either "halt", "poweroff", "reboot" or "kexec", depending on the chosen action. All executables in this directory are executed in parallel, and execution of the action is not continued before all executables finished.
My script is described at How to run a script at shutdown on Debian 9 or Raspbian 8 (Jessie) as:
#!/bin/sh
touch /test
However, it didn't seem to run on my Debian systems and I even reported it as bug.
Best Answer
In fact, the script is running. As pointed out by Bigon and in the bug report the
touch
just cannot take effect because the file system is already mounted read-only when the scripts in/lib/systemd/system-shutdown/
are executed.One can prove this by mounting and fs read-write before the
touch
:Now the
/test
really appears after a reboot.However, this also means that running my script through this folder will not be useful since it will happen too late.
In order to write to log files etc. one needs to run the script earlier through a service as suggested by Bigon. I explain this at How to run a script at shutdown on Debian 9 or Raspbian 8 (Jessie).