Когда 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-сессии.