Мне нужно, чтобы сетевые сообщения отправлялись, когда у меня происходит сбой или зависает служба systemd (т.е. переходит в состояние сбоя; я отслеживаю зависания с помощью WatchdogSec =). Я заметил, что у более новой systemd есть FailureAction =, но потом увидел, что это не позволяет произвольные команды, а только перезагрузку / выключение.
В частности, мне нужен способ отправки одного сетевого сообщения, когда systemd обнаруживает сбой программы, и другого, когда обнаруживает, что она зависла.
Я надеюсь на лучший ответ, чем «анализ журналов», и мне нужно что-то с почти мгновенным временем отклика, поэтому я не думаю, что подход с опросом хорош; это должно быть что-то инициированное происходящим событием.
Модули systemd поддерживают OnFailure, который активирует модуль (или несколько), когда модуль переходит в состояние сбоя. Вы можете поставить что-то вроде
OnFailure=notify-failed@%n
А затем создайте notify-failed@.service
сервис, где вы можете использовать необходимые спецификатор (вам, вероятно, понадобится хотя бы% i), чтобы запустить сценарий или команду, которая отправит уведомление.
Вы можете увидеть практический пример в http://n Northlightlabs.se/systemd.status.mail.on.unit.failure
Просто мой способ уведомить:
/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:
systemctl enable /etc/systemd/system/notify-email@service
В другие услуги добавляют:
[Unit]
OnFailure=notify-email@%i.service
Перезагрузите конфигурацию:
systemctl daemon-reload
Я наткнулся на эту утилиту, которая, кажется, обеспечивает следующее: https://github.com/joonty/systemd_mon