Everyone probably has heard of startup scripts such as Cloud-init
or user-data
which is passed as a startup script even libvirt has this feature.
Running a shutdown script is however not mentioned much, now why would you need a shutdown script, sometimes, a shutdown script is needed to do various things such as collect diagnosis etc.
The path /usr/lib/systemd/system-shutdown/
runs these scripts, however they are run quite late hence the system is mostly in read-only mode, for example to create a log file one would have to do
cat /usr/lib/systemd/system-shutdown/debug.sh
#!/bin/sh
mount -o remount,rw /
dmesg > /home/leon/shutdown-log
mount -o remount,ro /
The other way is to use a systemd script:
cat /etc/systemd/system/demo.service
[Unit]
Description=Run my custom task at shutdown only
DefaultDependencies=no
Conflicts=reboot.target
Before=poweroff.target halt.target shutdown.target
Requires=poweroff.target
[Service]
Type=oneshot
ExecStart=/tmp/script.sh start
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
This example is taken from here.
This is a pretty neat way to run shutdown scripts.