Я наблюдаю странное поведение cron, которое я не знаю, как отлаживать и исправлять.
Он игнорирует изменения в /etc/crontab
до перезапуска, например Я редактирую /etc/crontab
добавление
* * * * * root echo 'weee' > /tmp/stupidcron
к нему. Затем:
root@linux-plba:~# sleep 270 && ls /tmp/stupidcron
ls: cannot access /tmp/stupidcron: No such file or directory
Все, что добавлено с crontab
утилита работает.
Если я перезапущу cron, изменение будет сохранено, но любые последние изменения не будут до следующего перезапуска.
У меня root-почта перенаправлена на мой почтовый ящик, и там нет ничего интересного. Я тоже ничего не вижу в системном журнале.
Ближе всего к этому я нашел эту старую ветку в списке рассылки FreeBSD:
http://lists.freebsd.org/pipermail/freebsd-questions/2010-September/221179.html
Cron - это Vixie cron 4.1-194.209.1 x86-64
Наверное, кто-то видел такое поведение или знает, как его дальше отладить / исправить?
P.S. Я прочитал об этом вики сообщества: Почему мой crontab не работает и как я могу устранить его? и я считаю, что это дело там не рассматривается.
Хорошо, похоже, что на этот вопрос нет ответа.
Мой коллега решил понизить версию cron и посмотреть, что произойдет, и все сработало нормально.
Поэтому он просмотрел файлы спецификаций в SRPM для старых и новых версий, и, похоже, это один из патчей, нарушающих cron:
* Wed Aug 6 2014 tchvatal@suse.com
- Fix cron man page being ambiguous bnc#853010:
* bnc#853010-manpage-ambiguous.patch
- Fix wrong mtime when reruning cron scripts bnc#879734:
* bnc#879734-directory-mtime.patch
Поскольку трассировка показывает cron делает stat файл и структура, которую он получает является правильно, это проблема cron, а не проблема с неправильной настройкой / разрешениями и т. д.
Когда вы используете crontab -e (стандартный способ добавления заданий cron), вы могли заметить, что редактируете временный текстовый файл. После выхода из crontab установлены автоматически. Crontab создаст по одному файлу для каждого пользователя в /var/spool/cron/crontabs
. И демон cron, конечно, ищет /etc/crontab
слишком.
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.ZRmGzQ/crontab installed on Mon May 12 07:50:40 2014)
Это заголовок одного пользовательского файла в /var/spool/cron/crontabs
. Это означает, что редактирование файла не поможет. Также /tmp/crontab.ZRmGzQ/crontab
обозначает временный файл, используемый crontab -e при последнем обновлении.
sysadmin@omg:~$ crontab -l > tmp-cron.txt
sysadmin@omg:~$ echo '*/1 * * * * echo "APOEL ULTRAS" >> /tmp/stupidcron' >> tmp-cron.txt
sysadmin@omg:~$ crontab tmp-cron.txt
sysadmin@omg:~$ sleep 150 && cat /tmp/stupidcron
APOEL ULTRAS
APOEL ULTRAS
Здесь я экспортирую свои текущие crontab во временный файл tmp-cron.txt, добавляю crontab и снова устанавливаю файл. Работает отлично.
Итак, в основном crontab в вашем случае не работает, потому что он не был установлены.
Просто быть осторожен когда вы устанавливаете новый текстовый файл, вы перезаписываете старый. Сделайте резервную копию ваших файлов перед игрой.