La soluzione suggerita è eseguire l'unità di servizio come un servizio normale:dai un'occhiata a [Install]
sezione. Quindi tutto deve essere pensato al contrario, anche le dipendenze. Perché l'ordine di arresto è l'ordine di avvio inverso. Ecco perché lo script deve essere inserito in ExecStop=
.
La seguente soluzione funziona per me:
[Unit]
Description=...
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>
[Install]
WantedBy=multi-user.target
RemainAfterExit=true
è necessario quando non hai un ExecStart
azione.
Dopo aver creato il file, assicurati di systemctl daemon-reload
e systemctl enable yourservice --now
.
L'ho appena ricevuto da systemd IRC, i crediti andranno a mezcalero.
-
Eseguire un servizio immediatamente prima di iniziare qualsiasi servizio reboot/shutdown/halt/kexec (cioè nell'ultimo momento prima che il filesystem root diventi di sola lettura rimontato) usa questa configurazione del servizio:
[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
Abilitalo con:
systemctl enable my_service.service
-
Per eseguire uno script immediatamente prima dell'effettivo reboot/shutdown/halt/kexec (quando non puoi scrivere sul filesystem root, perché è stato rimontato in sola lettura) aggiungi questo script eseguibile al
/usr/lib/systemd/system-shutdown
cartella.Immediatamente prima di eseguire l'effettivo sistema halt/poweroff/reboot/kexec systemd-shutdown eseguirà tutti gli eseguibili in /usr/lib/systemd/system-shutdown/ e passerà loro un argomento:"halt", "poweroff", "reboot " o "kexec", a seconda dell'azione scelta. Tutti gli eseguibili in questa directory vengono eseguiti in parallelo e l'esecuzione dell'azione non viene continuata prima che tutti gli eseguibili siano terminati.
Vedi anche:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
Per quanto posso vedere questo fa quello di cui ho bisogno (ma non so esattamente perché).
[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