Так; але спочатку виправте свою помилкову програму, перш ніж поповнити systemd.
MariusMatutiae цілком правильний. У вас проблема з вашою програмою. Це тупики. Спілкування з systemd не є відповіддю. У кращому випадку це відволікання. Зафіксуйте програму, щоб вона не була порушена. Спрямуйте свою енергію на потрібне.
Але це означає, що інші люди збираються приїжджати сюди через назву питання, а не власне питання. Для їх користі ось відповідь на заголовок, ігноруючи власне питання:
Так, systemd може відслідковувати dæmons і автоматично перезапускати їх, якщо вони перестають говорити. Не будь-які старі dæmons, хоча. Як зазначає mvp, немає жодного способу дізнатися, що dæmon завис (у цьому Всесвіті, де проблема зупинки не можна вирішити, принаймні). Ні системна, ні будь-яка інша комп'ютерна програма ніколи не зможуть вивести з нуля, що якась випадкова програма, кинута на них, зайшла в глухий кут, або пішла в нескінченний цикл, або що завгодно. Найкраще, що ви отримаєте тут, - це виявити, що dæmon не виконував регулярну операцію "серцебиття" протягом необхідного періоду часу.
Dæmons, які користуються можливостями сторожової системи systemd, тому повинні бути написані, щоб говорити про специфічний для systemd протокол, sd_notify протокол. Це ускладнює код dæmon a tad. Далі це складно, тому що dæmons, якщо правильно написано, повинен перевірити, чи вони також викликані функцією сторожового дозволу.
Демонстрація цього протоколу для використання можливостей сторожової системи systemd ...
- … Повинен перевірити наявність
WATCHDOG_USEC
змінної середовища;
- ... повинен дзвонити sd_notify () постійно та часто впродовж усього свого життя, з встановленою
WATCHDOG=1
опцією, з інтервалом приблизно WATCHDOG_USEC
/ 2 ("USEC" означає мікросекунди);
- ... повинен бути
Type=notify
встановлений у своєму одиничному файлі;
- … Повинен мати
NotifyAccess=main
(або =all
) встановлений у своєму одиничному файлі;
- ... повинні бути встановлені
WatchdogSec=
секунди у його одиничному файлі.
- ... повинен пов'язуватися з
libsystemd-daemon.so
Якщо ви хочете дізнатись деталі кодування цього тексту, прочитавши посібник, переконайтеся, що ви перейшли до правильної StackExchange. Це SuperUser. StackOverflow там .
Подальше читання
for(;;) do_something();
?