iniciar un servicio systemd justo antes del cierre

iniciar un servicio systemd justo antes del cierre

Estoy desarrollando un script de apagado de systemd (archivo de unidad) para una base de datos postgresql y seguí las dos publicaciones siguientes pero no pude hacerlo funcionar.

¿Cómo ejecutar un script con systemd justo antes del apagado?

https://superuser.com/questions/1016827/how-do-i-run-a-script-before-everything-else-on-shutdown-with-systemd

Esto es lo que estoy haciendo con mi instalación de PostgreSQL: He escrito un script de inicio que inicia el clúster de la base de datos de PostgreSQL en el momento del arranque, pero el script de apagado que se muestra a continuación no parece funcionar en el momento del apagado. Si bien funciona bien si lo ejecuto con systemctl start service_name.

Cuando miré el registro de la base de datos, pude ver el mensaje "REGISTRO: se recibió una solicitud de apagado inteligente", que es el mensaje cuando el clúster de la base de datos se apaga en modo normal, que es lo que hace el sistema operativo que se apaga cuando apago el host con un " apagado -h ahora". Lo que quiero ver es "LOG: se recibió una solicitud de apagado rápido", que es un apagado rápido (modo inmediato) que ocurre cuando ejecuto el script con systemctl start service_name

Aquí está la definición del archivo unitario.

[Unit]
Description=Database Shutdown
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
ExecStart=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target

También intenté deshacerme de la [Install]sección pero systemctl no me permitió habilitar el servicio sin la [Install]sección. ¿Podría alguien indicarme la dirección correcta?

Respuesta1

systemdestá diseñado para manejar limpiamente este caso. Puede hacerlo creando un archivo pequeño que especifique un comando que desea ejecutar como parte de detener el servicio PostgreSQL. Primero, cree un directorio llamado:

/etc/systemd/system/postgresql.d/

En él, cree un archivo con cualquier nombre que termine en .conf, como custom-shutdown.conf. Agregue a ese archivo un par de líneas como esta:

[Service]
ExecStop=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &" 

Es posible que desee utilizar ExecStopPost=según su caso.

Ver documentos oficiales paraAmpliación de la configuración predeterminaday también documentos oficiales para elExecStop=y ExecStopPost=.

información relacionada