Назад | Перейти на главную страницу

получать уведомление, когда служба, контролируемая системой, переходит в состояние сбоя

Мне нужно, чтобы сетевые сообщения отправлялись, когда у меня происходит сбой или зависает служба 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