Ho scritto un programma che utilizza un database Postgres e per questo ho scritto un file di servizio systemd. Attualmente il mio servizio viene avviato correttamente all'avvio e si interrompe quando Postgres viene arrestato per l'aggiornamento (da apt upgrade
). Tuttavia, quando l'aggiornamento è completo e Postgres viene riavviato, il mio servizio non viene avviato automaticamente.
Posso definire alcune dipendenze per riavviare automaticamente il mio servizio?
Questo è lo stato del mio servizio dopo che è stato interrotto automaticamente durante l'aggiornamento di 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)
Si noti che posso riavviare manualmente il servizio bene.
Ecco il mio file di servizio:
[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
Ho provato ad aggiungere PartOf=postgresql.service
e BindsTo=postgresql.service
, quindi a interrompere e avviare manualmente Postgres, ma nessuno dei due ha aiutato.
Ovviamente potrei rimuovere il Requires
, ma è preferibile interrompere entrambi i servizi, se solo avessero entrambi riavviato.
Requires=
rimosso, che non ha aiutato. Penso che il problema sia che PartOf=
collega "l'arresto e il riavvio delle unità", ma Postgres non viene riavviato durante un aggiornamento. È stato arrestato, aggiornato e avviato.
systemctl restart postgresql
, systemd ricorda di riavviare nuovamente i suoi servizi dipendenti. Sembra che apt, per qualche ragione, combini stop
e start
invece di restart
.
PartOf=
sembra la soluzione giusta. L'hai provato conRequires=
rimosso?