Как автоматически сбросить крон на VPS под управлением Ubuntu?

Одному из моих клиентов разместили веб-сайт Magento на VPS под управлением Ubuntu.

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

Я уничтожил задание крона, которое заставило Magento повторно ставить последние команды в очередь, и эй престо - 7 электронных писем продаж появились хотя за следующие 30 секунд!

Существует ли способ, которым я могу установить сервис крона для автоматического перезапуска в 3:00 каждое утро - или что-то как этот? Кажется, что это остановило бы эту проблему от того, чтобы когда-нибудь быть проблемой снова...

0
задан 10 October 2018 в 02:26

1 ответ

Перезапуск крона (systemctl restart cron.service) не поможет: зависание (или в других отношениях тихое выполнение) процессы будут повторно порождены и продолжать бежать (или продолжайте зависать, в этом отношении). Необходимо остановить сам процесс организации очередей.

Один простой путь состоял бы в том, чтобы запустить Ваше задание через timeout команда. Скажем, Вы запускаете названную программу magento_que каждые 5 минут и хочу выполнить его самое большее 3 минуты и 30 секунд:

*/5 * * * * /usr/bin/timeout 3.5m /path/to/magento_que

После 3,5 минут magento_que будет отправлен SIGTERM (подобный CTRL-C). Если это не отвечает на это, можно определить другой сигнал или объединиться с --kill-after=DURATION:

*/5 * * * * /usr/bin/timeout --kill-after=10s 3.5m /path/to/magento_que

Теперь magento_que будет отправлен SIGTERM после 3,5 минут и если он откажется останавливаться затем, то SIGKILL будет отправлен 10 секунд спустя (который он не может прервать).

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

0
ответ дан 27 October 2019 в 08:29

Другие вопросы по тегам:

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