Evet; ama önce systemd ile uğraşmadan önce buggy programını düzeltin.
MariusMatutiae oldukça doğru. Programınızla ilgili bir sorununuz var. Kilitlenmeler. Sistemd ile uğraşmak cevap değil. En iyi ihtimalle dikkat dağıtıcı. Programınızı kırılmayacak şekilde düzeltin. Enerjilerinizi doğru olana yönlendirin.
Bununla birlikte, diğer insanlar uygun soru yerine soru başlığı nedeniyle buraya gelecekler. Yararları için, başlığın cevabı, soruyu doğru görmezden geliyor:
Evet, systemd konuşmaları izleyebilir ve konuşmayı bırakırlarsa otomatik olarak yeniden başlatabilir. Sadece eski dæmonslar da değil. MVP'nin belirttiği gibi, bir dæmon'un asıldığını bilmenin bir yolu yoktur (en azından durma sorununun kararsız olduğu bu evrende). Ne sistemd ne de başka bir bilgisayar programı, kendilerine atılan bazı rastgele programların kilitlendiğini ya da sonsuz bir döngüye ya da her neyse sıfırdan çıkarmayacaklardır. Burada elde edeceğiniz en iyi şey, bir dæmon'un gerekli bir zaman aralığında düzenli bir "kalp atışı" işlemi gerçekleştirmediğini tespit etmektir.
Bu nedenle, systemd'nin bekçi köpeği özelliklerinden yararlanan Dæmons'ın, sisteme özgü bir protokol olan sd_notify protokolünü konuşmak için yazılması gerekir. Bu dæmon kodunu biraz karmaşık hale getirir. Daha da karmaşıktır, çünkü dæmons düzgün yazılmışsa bekçi köpeği işlevi etkinken çağrılıp çağrılmadığını kontrol etmelidir.
Systemd'in bekçi köpeği yeteneğinden yararlanmak için bu protokolü konuşan bir dæmon…
- …
WATCHDOG_USEC
Ortam değişkenini kontrol etmelidir ;
- … Sd_notify () işlevini kullanım süresi boyunca sürekli olarak ve sık sık,
WATCHDOG=1
seçenek kümesi ile yaklaşık WATCHDOG_USEC
/ 2 aralığında ("USEC" mikrosaniye anlamına gelir) çağırmalıdır;
- …
Type=notify
Birim dosyasında ayarlanmış olmalıdır ;
- … Birim dosyasında
NotifyAccess=main
(veya =all
) ayarlanmış olmalıdır ;
- … Birim dosyasında
WatchdogSec=
saniyeler ayarlanmış olmalıdır .
- … İle bağlantı kurmalı
libsystemd-daemon.so
Bunu kodlamanın ayrıntılarını bilmek istiyorsanız, kılavuzu okuduktan sonra doğru StackExchange'e gittiğinizden emin olun. Bu SuperUser. StackOverflow orada .
daha fazla okuma
- Lennart Poettering. 2011-04-12. Bekçi köpeği . Freedesktop.org.
for(;;) do_something();
?