sistem tarafından izlenen servis başarısız duruma geçtiğinde bildirim al


32

Bir sistem servisi kilitlendiğinde ya da kapatıldığında ağ mesajlarının gönderilmesine ihtiyacım var (yani, başarısız duruma giriyor; Bekçi köpeği = = kullanarak askıda kalmayı izliyorum). Yeni sistemin FailureAction = 'a sahip olduğunu fark ettim, ancak daha sonra bunun isteğe bağlı komutlara izin vermediğini gördüm, fakat sadece yeniden başlatılıyor / kapanıyor.

Spesifik olarak, sistemd programın düştüğünü algıladığında bir ağ mesajının gönderilmesini, diğerinin kapatıldığını algıladığında bir yola ihtiyacım var.

"Günlükleri ayrıştırmak" yerine daha iyi bir cevap almayı umuyorum ve anında yanıt süresi olan bir şeye ihtiyacım var, bu yüzden bir yoklama yaklaşımının iyi olduğunu düşünmüyorum; meydana gelen olayın tetiklediği bir şey olmalı.


Lütfen elde etmeye çalıştığınız şeye bir örnek verebilir misiniz (çalışmayan bir örnek bile)?
dawud

Lütfen bu bilgileri bir yorumu eklemek yerine eklemek için sorunuzu düzenleyebilir misiniz? :)
dawud

Yanıtlar:


31

systemd üniteleri, ünite arızalandığında üniteyi (veya daha fazla) etkinleştirecek OnFailure özelliğini destekler. Gibi bir şey koyabilirsiniz

 OnFailure=notify-failed@%n

Ardından, bildirim gönderecek komut dosyasını veya komutu başlatmak için notify-failed@.servicegerekli belirteci (muhtemelen en az% i isteyeceksiniz) kullanabileceğiniz hizmeti oluşturun .

Pratik bir örneği http://northernlightlabs.se/systemd.status.mail.on.unit.failure adresinde görebilirsiniz.


5
Bağlantılı sitedeki talimatlar için gerekli birkaç düzeltme vardır. İlk olarak, notify%n.servicegereksiz ve sonuçlanır notify@my-service.service.service. İkincisi, %ibunun yerine kullanılmalıdır %I, aksi takdirde ismin tüm çizgileri eğik çizgilere dönüştürülür.
orodbhen

4
Bunu, birim dosyalarını değiştirmeden birden fazla veya tüm birimler için yapmanın bir yolu var mı?
Vladimir Panteleev 10:17

16

Sadece bildirimde bulunma yolum:

/etc/systemd/system/notify-email@.service

[Unit]
Description=Sent email 

[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c '/usr/bin/systemctl status %i | /usr/bin/mailx -Ssendwait -s "[SYSTEMD_%i] Fail" your_admin@company.blablabla'

systemd ekle:

systemctl enable /etc/systemd/system/notify-email@service

Diğer hizmetlerde şunları ekleyin:

[Unit]
OnFailure=notify-email@%i.service

Yapılandırmayı yeniden yükle:

systemctl daemon-reload

Üst üste defalarca tetiklemekten kaçınmanın bir yolu var mı? Bazı durumlarda, geceleri başarısız olan ve kendisini yeniden başlatmak için tekrar tekrar denenen bir hizmetle ilgili 1K e-posta almak yardımcı olmaz.
starbeamrainbowlabs

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.