Почему мой демон cron убивают каждые несколько минут?

Примерно неделю назад мой демон cron отказывается продолжать работать. Я использую Debian 6 x64 на виртуальной машине OpenVZ. Запуск чего-то вроде pgrep cron показывает, что демон не работает. Я начинаю службу с service cron start или же /etc/init.d/cron start и запускается, но исчезает из списка запущенных процессов через несколько минут (варьируясь от 1 до 30 минут, прежде чем процесс снова будет остановлен).

С помощью strace -f service cron startЯ вижу, что процесс по какой-то причине прекращается:

nanosleep({60, 0},  <unfinished ...>
+++ killed by SIGKILL +++

Там нет ничего актуального в /var/log/syslog, /var/log/messages, /var/log/auth.log, или же /var/log/kern.log объяснить, почему процесс умирает. Система имеет не менее 800 МБ свободной памяти и cat /proc/loadavg возвращается 0.22 0.13 0.04 поэтому ресурсы не должны быть проблемой. С cron Бег, free -m доклады:

             total       used       free     shared    buffers     cached
Mem:          1024        211        812          0          0          0
-/+ buffers/cache:        211        812
Swap:            0          0          0

Я также попытался удалить и переустановить cron использование пакета apt-get,

Обновление: я изначально думал, что проблема связана с ресурсом. Я удалил весь VPS и начал с нового образа Debian. Теперь в системе больше ничего не работает, но даже после чистой установки мой демон cron все еще убивается наугад.

Что еще я должен проверить? Как я узнаю, что убивает мою crond?

2 ответа

Решение

После долгих проб и ошибок я наткнулся на обходной путь. По какой-то причине cron убивается (предположительно, хостом), только если он работает в режиме демона. Если запущен с cron -fПроцесс продолжается. Итак, я создал простой сценарий, чтобы запустить его на переднем плане (и постоянно перезапускать его в маловероятном случае его гибели):

#!/bin/bash -u
while [ 1 ]; do
        logger -i -t cronrestart -p cron.warn "Launching cron daemon"
        cron -f
        logger -i -t cronrestart -p cron.warn "Cron daemon killed"
done
logger -i -t cronrestart -p cron.warn "Quitting"

Затем я запускаю этот скрипт запуска через nohup cronrestart >/dev/null & так что работает в фоновом режиме. Крон до сих пор бегал таким образом, не будучи убитым.

Я полагаю, что следующим шагом будет попытка запустить скрипт запуска в фоновом режиме, чтобы лучше имитировать режим демона cron,

Смотреть на /proc/user_beancountersболее конкретно, на failcnt колонка.

Для всех ненулевых записей вам нужно увеличить barrier/limit соответственно, это, вероятно, просто OpenVZ убивает ваши процессы за их попадание.

Вот описание каждого столбца: http://wiki.openvz.org/Proc/user_beancounters

Для подотчетных параметров удерживаемое поле показывает текущий счетчик для контейнера ("использование" ресурса), а поле maxheld показывает максимум счетчика за последний отчетный период. Отчетным периодом обычно является срок службы контейнера.

Поле failcnt показывает количество отклоненных "распределений ресурсов" за весь срок службы группы процессов.

Поля барьера и ограничения являются настройками управления ресурсами. Для некоторых параметров может использоваться только один, для некоторых параметров - оба. Эти поля могут указывать ограничения или гарантии, и их точное значение зависит от параметров. Описание каждого параметра в параметрах UBC содержит информацию о разнице между барьером и пределом для параметра.

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