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.serviceve BindsTo=postgresql.serviceve 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 stopve startyerine uygun restart.
PartOf=doğru çözüm gibi geliyor.Requires=Kaldırıldı ile denedin mi?