2016-09-21 4 views
1

Есть ли настройка в systemd для автоматического запуска службы после, например, 24 часа?systemd: автоматический перезапуск службы через 24 часа?

Или что является лучшим обходным решением для реализации такой функции?

Предыстория: У меня есть труднооткрывающийся недостаток в моем длинном веб-сборке и хранении в DB-коде. Он работает 10 или 20 дней, затем он внезапно останавливается, пока мы не сбросим его вручную. Даже чрезмерная регистрация не дала мне представления о том, где именно возникает проблема. Конечно, я бы предпочел решить основную проблему, но (по экономическим соображениям) убийство и перезагрузка грубой силы, вероятно, также сделают трюк.


EDIT: я, кажется, наконец-то нашел реальный недостаток - интернет-запрос, для которого я не делал (не мог) установить тайм-аут (поскольку функция read_json не позволяют эту опцию). Теперь разрешили это с помощью socket.setdefaulttimeout (...) - и я надеюсь, что это решит эту проблему с нечастыми остановками. Спасибо за помощь!

ответ

0

Systemd имеет встроенную функцию сторожевого таймера, см. Это link для получения дополнительной информации.

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

От 1:

Прежде всего, чтобы сделать программное обеспечение сторожевого-supervisable она должна быть исправлена ​​ разослать «Я жив» сигналы через регулярные промежутки времени в цикле событий. Исправить это довольно легко. Во-первых, демону необходимо, чтобы читал переменную среды WATCHDOG_USEC =. Если он установлен, он будет содержать интервал сторожевого таймера в формате usec, отформатированный как текстовая строка ASCII, , поскольку он настроен для этой услуги. Затем демона выдает . Sd_notify («WATCHDOG = 1») вызывает каждую половину этого интервала. Демон , исправленный таким образом, должен прозрачно поддерживать функцию сторожевого таймера , проверяя, установлена ​​ли переменная окружения и соблюдается значение , на которое установлено значение.

Еще более быстрый и грязный подход должен был бы создать хрон-работу, который уничтожает процесс каждые 24 часа и перезапускает свой сервис.

+0

Ничего себе, что действительно здорово. Бесконечно благодарен. «Сторож», фантастический. Будет использовать его _next time_ ... потому что я, кажется, наконец нашел реальный недостаток - интернет-запрос, для которого я не мог установить тайм-аут, потому что функция read_json не разрешала эту опцию. Теперь разрешили это с помощью socket.setdefaulttimeout (...) - и я надеюсь, что это решит эту проблему с нечастыми остановками. Но спасибо спасибо за вашу помощь! – AltSheets

0

Я думаю, что ваше требование такое же, как в этом следующем вопросе. question on periodic restart of service file

Надеюсь, это ответит на ваш вопрос.

+0

Спасибо, миллион. «WatchdogSec» = да, что еще проще, чем регулярное уведомление сторожевого пса «Я все еще жив». Будет использовать это _next time_ ... потому что я, кажется, наконец нашел реальную ошибку - интернет-запрос, для которого я не мог установить тайм-аут, потому что функция read_json не разрешала эту опцию.Теперь разрешили это с помощью socket.setdefaulttimeout (...) - и я надеюсь, что это решит эту проблему с нечастыми остановками. Но спасибо спасибо за вашу помощь! – AltSheets

Смежные вопросы