Yanıtlar:
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 .)
/etc/systemd/system
ve adını OnFailure=
yönergeye yerleştirin.
ExecStopPost
Bir birimi başlatmak yerine doğrudan bir komut çalıştırmak için de kullanabilirsiniz .
OnFailure
Ayarı 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 git
komut ç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.