Проверка работы cron в Unix/Linux
Cron — это демон, который запускает задачи по указанному (заданному) времени и который работает в наиболее распространенных дистрибутивах Unix / Linux. Поскольку cronjobs основаны на времени, иногда необходимо проверить и убедиться, что задание выполнялось в запланированное время. Иногда люди настраивают cron чтобы они отправляли вывод скрипта через системную почту или перенаправляюте вывод в файл; однако не все кроны настроены одинаково, и мние из них, могут быть настроены на отправку вывода в /dev/null, и тем самым, препятствуя любой возможности проверить выполняемое задание.
Первое что стоит проверить — это наличие ПИДа по крону:
# pgrep crond
Или:
# ps ax | grep crond | grep -Ev grep
crond, если он не настроен иначе, будет отправлять сообщение журнала в syslog каждый раз, когда он вызывает запланированное задание. Самый простой способ проверить работу cron на попытку срабатываания задание, — это проверить лог-файл.
В зависимости от Unix/Linux ОС, данный файл может иметь другое название.
Если у вас, CentOS/Fedora/RedHat, то просмотреть нужно:
# less /var/log/cron
Можно отсеять ненужное и поискать только необходимую крон-джобу, например:
# cat /var/log/cron| grep -E "back" Nov 28 00:00:01 linux-notes CROND[212211]: (root) CMD (/usr/bin/bash /home/linux/scripts/backUPs.sh) Dec 1 00:00:01 linux-notes CROND[126039]: (root) CMD (/usr/bin/bash /home/linux/scripts/backUPs.sh)
Собственно, все наглядно видно.
Если у вас, Ubuntu/Debian, то просмотреть нужно:
# less /var/log/syslog
Иногда, системные администраторы меняют вывод крона и для того, чтобы проверить куда пишуться логи по cron-job-ам, выполните:
# grep cron /etc/rsyslog.conf *.info;mail.none;authpriv.none;cron.none /var/log/messages # Log cron stuff cron.* /var/log/cron
С вывода видно, что у меня используется стандартный файл.
Так же, стоит проверить как настраивали крон-джобы:
# crontab -l
ИЛИ:
# crontab -l -u some_another_user
Возможно было перенаправление вывода в какой-то файл для дальнейшего анализа.
Стоит отметить, то — что некоторые кроны лежат тут:
# ls -lah /etc/cron.daily/ # ls -lah /etc/cron.hourly/ # ls -lah /etc/cron.weekly/ # ls -lah /etc/cron.monthly/
Бывает некоторые задачи запихивают туда.
Чтобы запретить или разрешить добавление крон-задат, нужно прописать юзера в:
# vim /etc/cron.d/cron.allow # vim /etc/cron.d/cron.deny
Так же, можно восспользоватся следующими командами для проверки статуса, запуска/остановки/перезапуска службы:
# service cron status # service cron start # service cron stop # service cron restart
Это все действия были для Linux, но сейчас приведу пример и для mac os x.
Недавно мне пришлось отлаживать работу Cron и проверять, действительно ли она выполняется по заданному расписанию. Я начал искать и проверять все логи и… нашел вроде бы подходящий файл для этого:
# grep cron /var/log/system.log
Но в нем не было признаков логирования крона!
Включить logging для Cron в Mac OSX
Открываем:
# vim /etc/syslog.conf
И прописываем:
cron.* /var/log/cron.log
Для перезапуска syslog-а, выполняем:
# launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist # launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
Проверяем что получилось!
А для помощи, можно вызвать:
# man crontab
А на этом, у меня все, статья «Проверка работы cron в Unix/Linux» завершена.