Если CRON не выполняется — причины может быть две — конфигурация самой службы на сервере и скрипт, который помещен в CRON. Начинать диагностику всегда следует с просмотра логов.
Что делать если задание CRON не выполняется
CRON — служба, которая по установленному расписанию выполняет задание. При этом процесс не отслеживается и если в задании допущен ошибка и ошибки содержит скрипт, добавленный в CRON, ожидаемого результата не будет и будет выглядеть как будто CRON задание не выполняется.
Задание в общем случае выглядит так:
5 4 * * * cd /home/site/ && /usr/bin/php somescript.php
Если в результате выполнения скрипта, должны обновляться какие-то данные и обновление не происходит следует прежде всего попробовать запускать задание из консоли. В примере задание не выполняется потому, что файл из задания отсутствует в нужном каталоге.
Т.е. авторизоваться на сервере по SSH с реквизитами пользователя для которого прописан CRON и затем выполнить
cd /home/site/ && /usr/bin/php somescript.php
Если скрипт содержит ошибки — они будут выведены в консоль, когда ошибок нет — поможет разработчик скрипта и CRON ни при чем.
При отсутствии ошибок в скрипте и успешном его выполнении из консоли следует отслеживать сами срабатывания. Самый простой способ — анализ логов.
Демон CRON записывает информацию о каждом срабатывании в /var/log/syslog.
Также можно скорректировать задание таким образом, чтобы запись в лог была частью задания — например, добавив конструкцию && echo `date` >> /var/log/cronlog
Задание примет такой вид
5 4 * * * cd /home/site/ && /usr/bin/php somescript.php && echo `date` >> /var/log/cronlog
Каждый раз при успешном выполнении скрипта в файл /var/log/cronlog будет дописываться время выполнения. Если время дописывается — задание выполняется успешно.
Читайте также про запуск CRON заданий из директории /etc/cron.d