Сценарий дочерней оболочки не ответил на терминальное прерывание, отправленное группе процессов переднего плана

systemctl показывает время последнего запуска (или время безотказной работы )службы. Но этого недостаточно, чтобы сказать, сколько раз служба была перезапущена.

Следующая команда, вероятно, может показать вам количество запусков (или перезапусков )вхождений:

journalctl -u .service | grep Запуск

Например:

$ journalctl -u foo.service | grep Starting
Jul 24 16:09:56 10.16.26.1 systemd[1]: Starting foo...
Jul 25 18:12:14 10.16.26.1 systemd[1]: Starting foo...

И эта команда просто подсчитывает количество перезапусков:

journalctl -u .service | grep Начиная | туалет -л

Например:

$ journalctl -u foo.service | grep Starting | wc -l 
2

Примечание :вы можете изменить строку, которую вы используете здесь. Вы можете использовать это «Запущено», чтобы узнать, успешно ли запущена служба. Или вы можете использовать «.service failed», чтобы указать количество случаев сбоя службы.

Кроме того, интересно отметить, что они обсуждали идею добавления счетчика в systemd на GitHub:

https://github.com/systemd/systemd/issues/4126

1
16.10.2020, 07:56
1 ответ

Для команд, выполняемых асинхронно не -интерактивными оболочками (, когда управление заданиями не включено ), SIGINT и SIGQUIT игнорируются в реализациях, совместимых с POSIX sh. Это требование POSIX , хотя некоторые оболочки его игнорируют.

Еще одно требование POSIX заключается в том, что если сигнал был проигнорирован при запуске оболочки, вы не можете отменить его игнорирование, так что вы облажались.

Здесь вы можете использовать zshвместо sh, который не имеет ни одной из этих раздражающих "особенностей" (, по крайней мере, в текущих версиях ).

В любом случае обработка сигналов в оболочках является одним из наименее надежных и переносимых аспектов. Вы обнаружите, что поведение сильно различается между оболочками и часто между разными версиями одной и той же оболочки. Будьте готовы к тому, что вам придется дергать за волосы и чесать голову, если вы попытаетесь сделать что-то -нетривиальное.

Я бы рекомендовал использовать другой язык, чтобы вы могли лучше контролировать происходящее.

Кроме того, я бы не стал слепо обрабатывать все возможные сигналы, а только те, которые вы ожидаете получить и знаете, как с ними справиться. Перехват SIGCHLD, например (, в котором заинтересована сама оболочка, поскольку ее задача — запускать процессы и обрабатывать их завершение ), скорее всего, не сделает того, что вам нужно.

2
18.03.2021, 22:57

Теги

Похожие вопросы