Napisałem program, który korzysta z bazy danych Postgres, i napisałem dla niego plik usługi systemd. Obecnie moja usługa dobrze się uruchamia przy rozruchu i zostaje zatrzymana, gdy Postgres zostanie zatrzymany w celu aktualizacji (przez apt upgrade
). Jednak po zakończeniu aktualizacji i ponownym uruchomieniu Postgres moja usługa nie zostanie uruchomiona automatycznie.
Czy mogę zdefiniować pewną zależność, aby moja usługa została ponownie uruchomiona automatycznie?
To jest stan mojej usługi po jej automatycznym zatrzymaniu podczas aktualizacji 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)
Pamiętaj, że mogę ręcznie uruchomić usługę ponownie w porządku.
Oto mój plik usługi:
[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
Próbowałem dodawanie PartOf=postgresql.service
i BindsTo=postgresql.service
, a następnie ręcznie zatrzymywania i uruchamiania PostgreSQL, ale nie pomogło.
Oczywiście mógłbym usunąć Requires
, ale lepiej jest zatrzymać obie usługi razem, jeśli tylko obie zaczną od nowa.
Requires=
usuniętym, to nie pomogło. Myślę, że problem polega na tym, że PartOf=
linki „zatrzymują i restartują jednostki”, ale Postgres nie jest restartowany podczas aktualizacji. Został zatrzymany, zaktualizowany i uruchomiony.
systemctl restart postgresql
, systemd pamięta, aby ponownie uruchomić swoje usługi zależne. Wydaje się, że z jakiegoś powodu trafna jest kombinacja stop
i start
zamiast restart
.
PartOf=
brzmi jak właściwe rozwiązanie. Próbowałeś go zRequires=
usuniętym?