Когда cron задача не выполняется, скрипт может отлично запускаться вручную, но молчать по расписанию. Это типичная проблема окружения.
Через cron часто работают бэкапы, импорты, рассылки, sitemap, парсеры и синхронизации. Если задача молчит, сайт постепенно теряет актуальность.
Коротко: нужно проверить пользователя cron, абсолютные пути, окружение, права и вывод ошибок.Почему это ломается
Cron не выполняется из-за неверного синтаксиса расписания, относительных путей, другого PHP или Python, отсутствующих env-переменных, прав на файл, неисполняемого скрипта или ошибок, которые не пишутся в лог.
Что проверяю первым
- есть ли задача в crontab нужного пользователя
- запускается ли команда вручную от этого пользователя
- используются ли абсолютные пути
- куда пишется stdout и stderr
- есть ли системные cron-логи
Как проходит исправление
Я воспроизвожу cron-команду вручную в максимально похожем окружении и добавляю явное логирование результата.
- исправляю расписание и пользователя
- заменяю относительные пути абсолютными
- указываю нужный интерпретатор
- добавляю env-переменные
- настраиваю логирование ошибок
Что подготовить
- текущую строку crontab
- путь к скрипту
- что задача должна делать
- доступ к серверу
- пример ручного запуска
Какой результат нужен
Cron должен запускаться по расписанию, писать понятный лог и давать сигнал, если задача завершилась ошибкой.
Чего лучше не делать
Не запускайте cron от root без необходимости. Лучше использовать нужного пользователя и правильные права.
Вопросы и ответы
Почему вручную работает, а cron нет?
У cron другое окружение, пути и пользователь.
Как увидеть ошибку cron?
Перенаправить stdout и stderr в лог или смотреть системные журналы.
Нужен ли полный путь к PHP?
Да, это часто решает разницу между CLI-версиями.
Можно ли получать уведомление о сбое?
Да, можно отправлять alert в Telegram или почту при ошибке.
Нужна похожая задача?
Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку, скриншот или лог ошибки, и я подскажу, с чего безопасно начать исправление.
Итог
Cron нужно настраивать явно: пользователь, пути, интерпретатор, env и логи должны быть прописаны, а не зависеть от shell-сессии.