
У меня есть простой systemd
сервисный модуль для перезапуска моего python
скрипта при безусловных выходах, определенных Restart=always
в определении сервиса. Я просто хочу быть абсолютно уверен, что даже если скрипт зависнет каким-то образом, я смогу перезапустить его, включив WatchdogSec=
переменную в файле модуля.
Моя проблема в том,официальная документация для журнала systemdне объясняет это ясно.
Цитата с той же страницы:
WatchdogSec=
Настраивает тайм-аут сторожевого таймера для службы. Сторожевой таймер активируется после завершения запуска. Служба должна
sd_notify(3)
регулярно вызывать"WATCHDOG=1"
(т. е. "keep-alive ping").
Неясно одно: будет лиуслугасам позаботится о поддержании пингов с помощью службы наблюдения (или) приложение, которое она запускает (в моем случае - скрипт Python), должно поддерживать пинг, обновляя упомянутую переменную среды.
Мое простое определение услуги
[Unit]
Description=dev-Status: Computes RF device availability status
[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
RestartSec=10
Restart=always
[Install]
WantedBy=default.target
Итак, если я просто добавлю в этот файл службы следующую строку, будет ли он автоматически перезапускать мой скрипт?
WatchdogSec=30s
решение1
Чтобы «погладить» или пропинговать сторожевой таймер, вы можете использовать Pythonсистемдпакет для отправки уведомления:
from systemd.daemon import notify, Notification
notify(Notification.WATCHDOG)