La solución sugerida es ejecutar la unidad de servicio como un servicio normal:eche un vistazo al [Install]
sección. Así que todo tiene que pensarse al revés, las dependencias también. Porque el orden de apagado es el orden de inicio inverso. Es por eso que el script debe colocarse en ExecStop=
.
La siguiente solución me funciona:
[Unit]
Description=...
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>
[Install]
WantedBy=multi-user.target
RemainAfterExit=true
es necesario cuando no tienes un ExecStart
acción.
Después de crear el archivo, asegúrese de systemctl daemon-reload
y systemctl enable yourservice --now
.
Lo acabo de recibir de systemd IRC, los créditos van a mezcalero.
-
Para ejecutar un servicio justo antes de comenzar cualquiera de los servicios de reinicio/apagado/detención/kexec (es decir, en el último momento antes de que el sistema de archivos raíz se vuelva a montar como de solo lectura) use esta configuración de servicio:
[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
Habilítalo con:
systemctl enable my_service.service
-
Para ejecutar un script justo antes del real reboot/shutdown/halt/kexec (cuando no puede escribir en el sistema de archivos raíz, porque se volvió a montar de solo lectura) agregue este script ejecutable al
/usr/lib/systemd/system-shutdown
directorio.Inmediatamente antes de ejecutar el sistema real halt/poweroff/reboot/kexec systemd-shutdown ejecutará todos los ejecutables en /usr/lib/systemd/system-shutdown/ y les pasará un argumento:"halt", "poweroff", "reboot " o "kexec", según la acción elegida. Todos los ejecutables en este directorio se ejecutan en paralelo, y la ejecución de la acción no continúa hasta que finalizan todos los ejecutables.
Ver también:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
Por lo que puedo ver, esto hace lo que necesito (pero no sé exactamente por qué).
[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