Bağımlılığı yükseltildiğinde sistemimin hizmetinin yeniden başlatılması


12

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.


PartOf=doğru çözüm gibi geliyor. Requires=Kaldırıldı ile denedin mi?
meuh

@meuh Şimdi 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ı.
Rennex

Eğlenceli bir şekilde, bunu yaptığınızda systemctl restart postgresql, systemd bağımlı hizmetlerini yeniden başlatmayı hatırlar. Bazı nedenlerden dolayı, kombinasyon yerine stopve startyerine uygun restart.
WGH

Yanıtlar:


14

Cevabı buldum: Hizmet dosyasının son satırını şu şekilde değiştirmem gerekiyordu:

WantedBy=postgresql.service

Bu şekilde, Postgres her başlatıldığında hizmetim de başlatılır - ancak hizmetim başarısız olursa, bu Postgres'i durdurmaz.

Bölümdeki yönergeler [Install]yalnızca birimlerin etkinleştirilmesini ve devre dışı bırakılmasını etkiler. Ancak hizmetim zaten etkinleştirildiğinde bu kadar basit değildi:

# systemctl enable tabill.service
Failed to execute operation: Too many levels of symbolic links

Hata mesajı yanıltıcıydı. Düzeltmek basitti:

# systemctl disable tabill.service
Removed symlink /etc/systemd/system/tabill.service.
Removed symlink /etc/systemd/system/multi-user.target.wants/tabill.service.

# systemctl enable tabill.service
Failed to execute operation: No such file or directory

# systemctl enable /srv/tabill/tabill.service
Created symlink from /etc/systemd/system/postgresql.service.wants/tabill.service to /srv/tabill/tabill.service.
Created symlink from /etc/systemd/system/tabill.service to /srv/tabill/tabill.service.

Şimdi hizmetim durur ve Postgres ne zaman başlar. Ve doğal olarak Postgres sistem önyüklendiğinde başlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.