Navrhovaným řešením je spustit servisní jednotku jako normální službu - podívejte se na [Install]
sekce. Takže všechno musí být myšleno obráceně, závislosti také. Protože pořadí vypnutí je obrácené pořadí spouštění. Proto musí být skript umístěn v ExecStop=
.
Následující řešení mi vyhovuje:
[Unit]
Description=...
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>
[Install]
WantedBy=multi-user.target
RemainAfterExit=true
je potřeba, když nemáte ExecStart
akce.
Po vytvoření souboru se ujistěte, že systemctl daemon-reload
a systemctl enable yourservice --now
.
Právě jsem to dostal od systemd IRC, kredity jdou do mezcalera.
-
Spuštění služby těsně před spuštěním kterákoli ze služeb reboot/shutdown/halt/kexec (tj. v poslední chvíli před opětovným připojením kořenového souborového systému pouze pro čtení) použijte tuto konfiguraci služby:
[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
Povolte jej pomocí:
systemctl enable my_service.service
-
Chcete-li spustit skript těsně před skutečným reboot/shutdown/halt/kexec (když nemůžete zapisovat do kořenového souborového systému, protože byl znovu připojen pouze pro čtení) přidejte tento spustitelný skript do
/usr/lib/systemd/system-shutdown
adresář.Bezprostředně před provedením samotného systému halt/poweroff/reboot/kexec systemd-shutdown spustí všechny spustitelné soubory v /usr/lib/systemd/system-shutdown/ a předá jim jeden argument:buď "halt", "poweroff", "reboot" " nebo "kexec", v závislosti na zvolené akci. Všechny spustitelné soubory v tomto adresáři jsou spouštěny paralelně a provádění akce nepokračuje, dokud nejsou dokončeny všechny spustitelné soubory.
Viz také:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
Pokud vidím, dělá to, co potřebuji (ale nevím přesně proč).
[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