Postgres veritabanı kullanan bir program yazdım ve bunun için bir systemd hizmet dosyası yazdım. Şu anda benim hizmetim önyükleme güzel başlar ve Postgres yükseltme (tarafından apt upgrade
) için durdurulduğunda durur . Ancak, yükseltme tamamlandığında ve Postgres yeniden başlatıldığında, hizmetim otomatik olarak başlatılmaz.
Hizmetimin otomatik olarak yeniden başlatılması için biraz bağımlılık tanımlayabilir miyim?
Postgres yükseltmesi sırasında otomatik olarak durdurulduktan sonra hizmetimin durumu:
● 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)
Hizmeti manuel olarak yeniden başlatabileceğimi unutmayın.
İşte hizmet dosyam:
[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
Ben ekleyerek denedim PartOf=postgresql.service
ve BindsTo=postgresql.service
ve sonra elle durdurma ve Postgres başlayan, ama ikisi de yardımcı oldu.
Tabii ki kaldırabilirim Requires
, ancak her ikisinin de birlikte durdurulması tercih edilir, eğer her ikisi de yeniden başlarsa.
Requires=
kaldırıldı ile denedim , bu yardımcı olmadı. Bence sorun, PartOf=
bağlantıların "birimlerin durdurulması ve yeniden başlatılması", ancak Postgres'in yükseltme sırasında yeniden başlatılmamasıdır . Durdu, yükseltildi ve başladı.
systemctl restart postgresql
, systemd bağımlı hizmetlerini yeniden başlatmayı hatırlar. Bazı nedenlerden dolayı, kombinasyon yerine stop
ve start
yerine uygun restart
.
PartOf=
doğru çözüm gibi geliyor.Requires=
Kaldırıldı ile denedin mi?