Ich habe ein Programm geschrieben, das eine Postgres-Datenbank verwendet, und ich habe eine systemd-Servicedatei dafür geschrieben. Derzeit wird mein Dienst beim Booten einwandfrei gestartet und gestoppt, wenn Postgres für ein Upgrade (von apt upgrade
) gestoppt wird . Wenn das Upgrade jedoch abgeschlossen ist und Postgres erneut gestartet wird, wird mein Dienst nicht automatisch gestartet.
Kann ich eine Abhängigkeit definieren, um meinen Dienst automatisch neu zu starten?
Dies ist der Status meines Dienstes, nachdem er während des Postgres-Upgrades automatisch gestoppt wurde:
● 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)
Beachten Sie, dass ich den Dienst problemlos manuell neu starten kann.
Hier ist meine Servicedatei:
[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
Ich habe versucht , Postgres hinzuzufügen PartOf=postgresql.service
und BindsTo=postgresql.service
dann manuell zu stoppen und zu starten, aber beides hat nicht geholfen.
Natürlich könnte ich das entfernen Requires
, aber beide Dienste zusammen zu stoppen ist vorzuziehen, wenn nur beide wieder starten würden.
Requires=
entfernt versucht , das hat nicht geholfen. Ich denke, das Problem ist, dass PartOf=
Links "Stoppen und Neustarten von Einheiten", aber Postgres wird während eines Upgrades nicht neu gestartet . Es wird gestoppt, aktualisiert und gestartet.
systemctl restart postgresql
erinnert sich systemd dabei daran, die abhängigen Dienste erneut zu starten. Es scheint aus irgendeinem Grund passend zu sein, eine Kombination von stop
und start
anstelle von restart
.
PartOf=
klingt nach der richtigen Lösung. Hast du es mitRequires=
entfernt versucht ?