Escribí un programa que usa una base de datos Postgres y escribí un archivo de servicio systemd para él. Actualmente mi servicio se inicia en el arranque muy bien, y se detiene cuando Postgres se detiene para actualizar (por apt upgrade
). Sin embargo, cuando se completa la actualización y Postgres se inicia nuevamente, mi servicio no se inicia automáticamente.
¿Puedo definir alguna dependencia para que mi servicio vuelva a iniciarse automáticamente?
Este es el estado de mi servicio después de que se detuvo automáticamente durante la actualización de Postgres:
● tabill.service - My service
Loaded: loaded (/srv/tabill/tabill.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2017-07-04 00:29:24 EEST; 44min ago
Main PID: 1048 (code=killed, signal=TERM)
Tenga en cuenta que puedo iniciar manualmente el servicio nuevamente bien.
Aquí está mi archivo de servicio:
[Unit]
Description=My service
Wants=nginx.service
Requires=postgresql.service
After=postgresql.service
[Service]
Type=simple
ExecStart=/srv/tabill/app/serve
Restart=always
TimeoutSec=60
[Install]
WantedBy=multi-user.target
Intenté agregar PartOf=postgresql.service
y BindsTo=postgresql.service
, y luego detener y comenzar manualmente Postgres, pero ninguno ayudó.
Por supuesto, podría eliminar el Requires
, pero es preferible detener ambos servicios juntos, si solo ambos volvieran a comenzar.
Requires=
eliminado, eso no ayudó. Creo que el problema es que PartOf=
vincula "detener y reiniciar unidades", pero Postgres no se reinicia durante una actualización. Se detuvo, actualizó y comenzó.
systemctl restart postgresql
, systemd recuerda reiniciar sus servicios dependientes nuevamente. Parece apto, por alguna razón, combina stop
y start
no en lugar de restart
.
PartOf=
Suena como la solución correcta. ¿Lo intentaste conRequires=
eliminado?