Cron не запускает задание: пользователь, путь и окружение
Если cron не выполняет задание, проверьте три события отдельно: наступило ли время запуска, стартовала ли команда и получен ли нужный результат. При успешном ручном запуске сравните пользователя, пути и окружение. Активная служба планировщика не доказывает, что скрипт сформировал отчёт или отправил уведомление.
Выберите один пропущенный запуск
Фраза «cron не работает» может означать совершенно разные ситуации. Команда не появилась в журнале, процесс завершился с ошибкой, файл записался в другой каталог или приложение ничего не сделало без обязательного параметра. Начинать с перезапуска службы до выяснения этого различия неудобно: исчезает исходная картина.
Зафиксируйте задачу, ожидаемое время и часовой пояс, пользователя, команду и ожидаемый результат. Для отчёта укажите, какой период он должен закрывать; для напоминаний — какой набор событий обработать. Такая формулировка позволяет отличить технический старт от фактического завершения работы.
Проверьте, какой именно cron используется
В руководстве Cronie для crontab различаются пользовательская таблица и системные задания, где дополнительно указывается пользователь. Нельзя переносить строку между этими форматами, предполагая одинаковый набор полей. Сначала установите место и способ настройки вашей задачи.
Примеры здесь относятся к обычной проверке cron с учётом документации Cronie. У панели хостинга, контейнера или облачного планировщика могут быть другие правила. Имя поля в интерфейсе само по себе не подтверждает реализацию: сверяйтесь с документацией именно используемой среды.
Что отличается от ручного запуска
| Условие | При интерактивной проверке | При запуске cron | Что сравнить по факту |
|---|---|---|---|
| Пользователь | Человек вошёл под своей учётной записью | Задание имеет отдельного исполнителя | Владельца задачи и доступ к нужному ресурсу |
| Путь к программе | Команда находится в окружении сеанса | Такой же поиск программы не подтверждён | Используемый исполняемый файл и PATH |
| Рабочий каталог | Перед запуском человек перешёл в проект | Переход может не быть задан | Откуда читаются относительные пути |
| Оболочка | Команда проверена в привычной оболочке | В Cronie есть собственная настройка SHELL | Поддерживается ли использованный синтаксис |
| Настройки приложения | Переменные уже загружены в сеанс | Необходимые значения могут отсутствовать | Способ получения настроек без вывода секретов |
| Результат | Вывод сразу виден человеку | Вывод нужно целенаправленно сохранить | Место журнала, ошибку, код и итог операции |
Таблица не утверждает, что каждый cron всегда запускает проект из одной определённой папки или с одинаковым PATH. Она показывает различия, которые нужно измерить в своей системе. Успех команды из другого контекста не является проверкой условий планировщика.
Сделайте пути и зависимости явными
Найдите все места, где команда полагается на текущее окружение: выбор интерпретатора, относительный путь к файлу, каталог конфигурации, активированное виртуальное окружение. Лучше явно согласовать эти зависимости в запуске или его обёртке, чем добавлять пользователю задания лишние права.
В Cronie оболочка по умолчанию — /bin/sh, если настройкой SHELL не задано другое. Поэтому конструкция, успешно проверенная в иной оболочке, требует отдельной сверки. Не запускайте всё от root как способ обойти неизвестную причину: сначала подтвердите конкретный недостаток доступа или различие среды.
При поддержке сервера полезно сохранить короткий паспорт выполнения: исполнитель, программа, рабочий путь, источник настроек и место результата. Сами значения паролей и токенов в такой паспорт не включают. Задача должна получать их принятым для проекта способом, а не через публичный диагностический вывод.
Расписание и журнал могут говорить о разном времени
Руководство Cronie описывает CRON_TZ для зоны таблицы и отдельно предупреждает о локальной зоне журнала демона. Если время ожидаемого запуска и запись лога сравниваются без зон, можно ошибочно решить, что команда пропущена. Не считайте настройку CRON_TZ универсально поддерживаемой любой системой с названием cron.
Сохраните и расписание, и момент наблюдения в понятной временной шкале. Если бизнес просит ежедневный отчёт за вчера, дополнительно проверьте, как приложение определяет границы периода. Своевременно стартовавшая команда может обработать не тот день, и это уже ошибка параметров задачи, а не отсутствие запуска.
Диагностический проход без повторных действий
- Найдите ожидаемый момент выполнения и проверьте, установлена ли задача в нужном месте.
- Получите свидетельство старта команды или подтвердите его отсутствие по доступной диагностике.
- Для стартовавшей команды сохраните вывод и завершение, сопоставьте контекст с ручной проверкой.
- Проверьте бизнес-результат: файл, обработанный период, подтверждённое состояние операции.
- Перед повторным запуском установите, не выполнена ли часть действий уже и безопасно ли повторение.
Последний шаг особенно нужен для уведомлений, начислений и обмена данными. Если процесс остановился после части работы, повтор может затронуть уже обработанные записи. В статье не предлагается отправлять реальные сообщения или менять выплаты ради проверки. Безопасный сценарий подбирают под конкретное приложение.
Нулевой код ещё не означает готовый отчёт
Команда может корректно завершиться, потому что ей нечего обрабатывать, либо потому, что ошибка перехвачена внутри приложения. Поэтому критерий приёмки задайте отдельно: нужный период закрыт, ожидаемый файл существует и читается, статус операции подтверждён. Если действия выполняются через внешний сервис, учитывайте его фактическое подтверждение результата.
Для автоматизации процессов такая запись итога полезнее единственного сообщения «скрипт запущен». Сайт и фоновая задача также проверяются отдельно: работающая главная страница не доказывает исправность ночного импорта. Это стоит включить в регламент сопровождения сайта.
Как заметить следующий пропуск
Согласуйте наблюдаемый результат и допустимый для бизнеса срок его появления. Контроль должен обнаруживать отсутствие этого результата, а не только наличие процесса cron. Уведомление об ошибке самого приложения и проверка того, что задача вообще выполнялась, дополняют друг друга.
Вопросы и ответы
Почему cron не запускает скрипт, который вручную работает?
Сравните пользователя, интерпретатор, рабочий каталог и необходимые настройки. Ручной сеанс может предоставлять то, что явно не задано задаче. Затем сохраните вывод конкретной попытки вместо многократного запуска наугад.
Как PATH влияет на cron?
Если команда задана коротким именем, важно, какой исполняемый файл будет найден в контексте задачи. Не предполагайте, что поиск совпадает с вашим интерактивным сеансом. Уточните используемую программу и согласуйте явный путь там, где это требуется.
Нужно ли указывать рабочий каталог для cron?
Если приложение использует относительные пути, его рабочий каталог должен соответствовать ожидаемому. Сначала выясните фактический контекст запуска и зависимости проекта. Не заменяйте эту проверку переносом файлов в случайную папку.
Читайте также
Купили VPS: что проверить до запуска сайта
ПоддержкаПеренос cron: как оставить одного исполнителя заданий
РазработкаПриложение открылось дважды: как принять второй запуск
БизнесРасходы на интеграцию после запуска: что заложить в бюджет
БизнесСайт после запуска: сколько стоит поддержка и что прописать в SLA
РазработкаПриёмка веб-проекта: доступы, исходники и запуск без зависимости от подрядчика