Raspberry PI/systemd: ejecuta el script al apagar/apagar pero no al reiniciar

Raspberry PI/systemd: ejecuta el script al apagar/apagar pero no al reiniciar

En Raspberry PI (ejecutando raspbian) necesito ejecutar el script encerrar/apagado, perono al reiniciar.

Mi primer intento fue definir un servicio de la siguiente manera:

[Unit]
Description=Power off service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/usr/local/bin/poweroff.sh

[Install]
WantedBy=multi-user.target

Esto funcionó, pero el script también se estaba ejecutando al reiniciar. Así que intenté instalarlo en un destino diferente:

[Install]
WantedBy=shutdown.target halt.target

Pero después de este cambio, el script no se ejecuta en absoluto.

¿Cuál es la forma correcta de definir las acciones que deben ejecutarse al apagar?

Respuesta1

Por lo que he recopilado en la red, la mejor opción es tenerlo Conflicts=reboot.targeten el archivo de la unidad ( [Unit]sección) y luego ejecutar lo siguiente en el script:

systemctl list-jobs | egrep -q 'reboot.target.*start'

Si reboot.targetestá programado para iniciarse, es un reinicio. De lo contrario, no lo es. Si el comando "tiene éxito", el sistema se reiniciará. De lo contrario, se está cerrando. Podrías usarlo así:

if ! systemctl list-jobs | egrep -q 'reboot.target.*start'; then
  echo Shutting down
fi

Respuesta2

La respuesta de Daniel resuelve el problema de la pregunta. Pero todavía no era exactamente lo que necesitaba: el script se invocó demasiado pronto y necesitaba que se ejecutara lo más tarde posible (el script en realidad apaga la alimentación usando el relé conectado al GPIOpin de RPi)

Después de invertir algo más de tiempo, encontré una solución mucho más sencilla que hacía exactamente lo que estaba buscando:

  1. Crear directorio /etc/systemd/system/systemd-poweroff.service.dsi aún no existe
  2. Cree un nuevo archivo poweroff.confen /etc/systemd/system/systemd-poweroff.service.del directorio:
[Service]
ExecStartPre=/usr/local/bin/poweroff.sh

Con este enfoque no es necesario agregar un nuevo servicio.

información relacionada