Hizmet başarısız olduğunda rasgele komut çalıştırma


12

Bir hizmet başarısız olduğunda bazı komut dosyası çalıştırmak istiyorum. Buna en yakın gördüğüm FailureAction=seçenek ( [Service]bölümün altında ), ancak sadece yeniden başlatma komutları sunuyor.

Yanıtlar:


11

Bölümde, systemd.unit (5) belgesinde belgelenen bir OnFailure=yönerge vardır . Aşağıdaki gibi tanımlanır:[Unit]

Bu birim "başarısız" durumuna girdiğinde etkinleştirilen bir veya daha fazla birimin boşlukla ayrılmış listesi.

(Ayrıca OnFailureJobMode=, aynı bölümde OnFailure = birimleri etkinleştirmek için iş modunun ayarlanmasına izin veren bir yönerge vardır .)


Görünüşe göre bu seçenekler sadece komut dosyaları yerine diğer birimleri başlatır.
tshepang

2
@Tshepang: Elbette. Systemd'de, bir birim, bir şey yapmanın temel bir birimidir . Betiğiniz için basit bir birim yazın, altına koyun /etc/systemd/systemve adını OnFailure=yönergeye yerleştirin.
intelfx

2

ExecStopPostBir birimi başlatmak yerine doğrudan bir komut çalıştırmak için de kullanabilirsiniz .

OnFailureAyarı ile mutlu değildi, bu yüzden aramaya devam etti ve buldum ExecStopPost.

Aşağıdaki gerçek örnek, ana görev başarısız olursa, systemd bir gitkomut çalıştırır .

[Unit]
Description=SRI Dispenser Server
ConditionPathExists=|/usr/bin/
After=sri-boot-dsp.service

[Service]
WorkingDirectory=/usr/share/sri/configurations/transmitter

User=root

# This is task to run when this service starts
ExecStart=/usr/bin/python -m sri.DispenserServer

# If any of the ExecStart tasks fail, then ExecStopPost will run
ExecStopPost=/bin/git checkout -- .

Restart=always
RestartSec=10
KillSignal=SIGKILL


[Install]
WantedBy=multi-user.target

https://www.freedesktop.org/software/systemd/man/systemd.service.html

ExecStopPost = Hizmet durdurulduktan sonra yürütülen ek komutlar. Bu, ExecStop = içinde yapılandırılan komutların kullanıldığı, hizmetin herhangi bir ExecStop = tanımlı olmadığı veya hizmetin beklenmedik şekilde çıktığı durumları içerir. Bu bağımsız değişken, ExecStart = için açıklananla aynı düzeni izleyen birden fazla komut satırı alır. Bu ayarların kullanılması isteğe bağlıdır. Tanımlayıcı ve ortam değişkeni ikamesi desteklenir. - Bu ayarla belirtilen ExecStop = 'dan farklı olarak - komutlar, bir hizmet düzgün başlatılamadığında ve tekrar kapatıldığında çağrılır.

Bu ayarın, hizmet doğru şekilde başlatılamadığında bile yapılacak temizleme işlemleri için kullanılması önerilir. Bu ayar ile yapılandırılan komutların, hizmet yarı yolda başlamamış ve tamamlanmamış veriler etrafında bırakılsa bile çalışabilmelidir. Bu ayar ile belirtilen komutlar yürütüldüğünde hizmetin işlemleri sonlandırıldığından, onlarla iletişim kurmaya çalışmamalıdır.

Bu ayar ile yapılandırılan tüm komutların, hizmetin sonuç kodunun yanı sıra $ SERVICE_RESULT, $ EXIT_CODE ve $ EXIT_STATUS ortam değişkenlerinde ayarlanan ana işlemin çıkış kodu ve durumuyla çağrıldığını unutmayın, bkz. Systemd.exec (5) ayrıntılar için.

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.