Иногда crontab не перезагружается демоном cron

Я задаю этот вопрос, потому что я не мог найти ответ здесь:
Почему мой crontab не работает, и как я могу устранить его?

контекст

У нас есть несколько серверов под управлением Debian/ Wheezy.

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

# user is legec :

# save the crontab to a file
crontab -ulegec -l > /home/legec/.backup/crontab
# empty the crontab
echo "" | crontab -ulegec

backup ...

# reload crontab
cat /home/legec/.backup/crontab | crontab -ulegec

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

Эта задача выполняется на ~80 серверах; в зависимости от сервера задание резервного копирования займет от 1 минуты до 2 часов.

ошибка

Время от времени cron не обнаруживает последнюю перезагрузку и не выполняет ни одно из заданий, перечисленных в crontab.

Файл в /var/spool/cron/crontabs/legec имеет ожидаемое содержание и дату изменения:

$ ls -lh /var/spool/cron/crontabs/legec
-rw------- 1 legec crontab 6.7K Sep 22 04:03 /var/spool/cron/crontabs/legec

но журналы cron показывают, что cron не обнаружил последнее изменение:

$ cat /var/log/cron.log | grep -E "LIST|RELOAD|REPLACE"
...
# yesterday's backup : all went fine
Sep 21 04:00:06 lgserver crontab[6670]: (root) LIST (legec)
Sep 21 04:00:06 lgserver crontab[6671]: (root) LIST (legec)
Sep 21 04:00:06 lgserver crontab[6673]: (root) REPLACE (legec)
Sep 21 04:01:01 lgserver /usr/sbin/cron[2025]: (legec) RELOAD (crontabs/legec)
Sep 21 04:03:01 lgserver crontab[7071]: (root) REPLACE (legec)
Sep 21 04:03:01 lgserver /usr/sbin/cron[2025]: (legec) RELOAD (crontabs/legec)

# today's backup : no final RELOAD event
Sep 22 04:00:07 lgserver crontab[24163]: (root) LIST (legec)
Sep 22 04:00:07 lgserver crontab[24164]: (root) LIST (legec)
Sep 22 04:00:07 lgserver crontab[24166]: (root) REPLACE (legec)
Sep 22 04:01:01 lgserver /usr/sbin/cron[2025]: (legec) RELOAD (crontabs/legec)
Sep 22 04:03:01 lgserver crontab[24458]: (root) REPLACE (legec)
          # no RELOAD line here

"Время от времени" означает: нет регулярности, мы видим эту ошибку, возможно, раз в месяц, на одном случайном сервере из ~80, которые работают.

Вопрос

У кого-нибудь есть подсказка, где искать?

1 ответ

Прежде всего, просто чтобы быть в безопасности, я бы посоветовал использовать правильные формы борьбы с crontab, а именно

crontab -u user -r

удалить его crontab, и

crontab -u user backed_up_crontab_file

восстановить.

Во-вторых, ваши сроки могут быть важны. Если crontab пользователя запускается редко, возможно, он пропустил 1 раз после восстановления, потому что он бы сработал за минуту до того, как он был фактически восстановлен.

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