Одному из моих клиентов разместили веб-сайт Magento на VPS под управлением Ubuntu.
Они жаловались, что не получали копий электронных писем продаж - и после исследования большого количества других вещей, я нашел, что задание крона на сервере застряло приблизительно два месяца назад.
Я уничтожил задание крона, которое заставило Magento повторно ставить последние команды в очередь, и эй престо - 7 электронных писем продаж появились хотя за следующие 30 секунд!
Существует ли способ, которым я могу установить сервис крона для автоматического перезапуска в 3:00 каждое утро - или что-то как этот? Кажется, что это остановило бы эту проблему от того, чтобы когда-нибудь быть проблемой снова...
Перезапуск крона (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 секунд спустя (который он не может прервать).
Однако это - просто обходное решение, и я должен сказать, что предпочел бы находить настоящую причину, почему программа зависает.