What do I need to put in the
[install] section, so that systemd runs
/home/me/so.pl right before shutdown and also before
/proc/self/net/dev gets destroyed?
[Unit] Description=Log Traffic [Service] ExecStart=/home/me/so.pl [Install] ?
The suggested solution is to run the service unit as a normal service - have a look at the
[Install] section. So everything has to be thought reverse, dependencies too. Because the shutdown order is the reverse startup order. That's why the script has to be placed in
The following solution is working for me:
[Unit] Description=... [Service] Type=oneshot RemainAfterExit=true ExecStop=<your script/program> [Install] WantedBy=multi-user.target
RemainAfterExit=true is needed when you don't have an
After creating the file, make sure to
systemctl daemon-reload and
systemctl enable yourservice --now.
I just got it from systemd IRC, credits are going to mezcalero.
As far as I can see this does what I need (but I don't know exactly why).
[Unit] Description=Log Traffic DefaultDependencies=no Before=shutdown.target reboot.target halt.target [Service] ExecStart=/usr/local/bin/perl /home/me/log_traffic.pl --stop Type=oneshot
To run a service right before starting any of reboot/shutdown/halt/kexec services (i.e. in the last moment before root filesystem becomes remounted read-only) use this service config:
[Unit] Description=Save system clock on shutdown DefaultDependencies=no After=final.target [Service] Type=oneshot ExecStart=/usr/lib/systemd/scripts/fake-hwclock.sh save [Install] WantedBy=final.target
Enable it with:
systemctl enable my_service.service
To run a script right before actual reboot/shutdown/halt/kexec (when you cannot write to the root filesystem, because it was remounted read-only) add this script executable to the
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.
I am not totally sure but i don't think you need the install part though i added it explicitly. I also didn't test it but i think it should help you get started:
[Unit] Description=Log Traffic Requires=network.target After=network.target Before=shutdown.target DefaultDependencies=no [Service] ExecStart=/home/me/so.pl Type=oneshot RemainAfterExit=yes [Install] WantedBy=shutdown.target
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?