Что означает ошибка CRON001
Ошибка CRON001 (часто отображается как error: CRON output missing) сигнализирует, что запланированное cron-задание завершилось, но не произвело никакого вывода в стандартный поток или настроенный лог. Cron ожидает, что задание что-то запишет (например, для отслеживания или почтового уведомления), и отсутствие вывода воспринимается как «задание молчит».
Типичные ситуации:
- Задание должно записывать данные в
/var/log/..., но этого не происходит. - Вывод перенаправляется почтовой службе, которая не доставляет сообщения.
- Задание падает с ошибкой, и эта ошибка не попадает в журнал.
Причины возникновения
- Вывод проигнорирован – cron перенаправляет стандартный вывод в почтовую службу, которая не настроена (
MAILTOпусто) или не работает. - Отсутствует PATH/SHELL – без явного
SHELLиPATHcrontab команда может не выполниться или завершиться с ошибкой silenciously. - Недостаточные права – задание запускается от имени пользователя без прав на запись в целевой лог-файл.
- Ошибка в команде – сама команда может упасть с неуловимой ошибкой, ничего не выведя.
- Драйвер или зависимость отсутствует – внешняя команда, скрипт или утилита не установлены в среде cron, что приводит к немедленному завершению работы.
Способы решения
Способ 1: Явно перенаправьте вывод в лог
Большинство cron-заданий должны записывать результаты в файл, а не полагаться на почту. Добавьте перенаправление в crontab:
# Пример записи в crontab
0 2 * * * /usr/local/bin/backup.sh > /var/log/backup.log 2>&1
💡 Совет: Используйте
>>, если вам нужен апендинг;2>&1объединяет стандартный вывод и ошибки.
Способ 2: Настройте MAILTO
Если вам нужны уведомления по почте, установите MAILTO в начале crontab:
MAILTO=admin@example.com
0 3 * * * /path/to/script.sh
Теперь любой вывод будет отправлен указанному пользователю.
Способ 3: Проверьте задание вручную
Перед тем как полагаться на cron, запустите команду в идентичной среде:
sudo -u <user> /bin/bash -c "/path/to/script.sh"
Это показывает, есть ли действительно что-то на выходе, или скрипт падает с ошибкой.
Способ 4: Установите переменные окружения
Добавьте SHELL и PATH в начало crontab:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 4 * * * /home/user/scripts/report.sh > /var/log/report.log
Способ 5: Проверьте системный журнал cron
Cron записывает каждую попытку в /var/log/syslog (или journalctl -u cron). Поиск ключевых слов поможет выявить скрытые ошибки:
grep "CRON output missing" /var/log/syslog
journalctl -u cron -u --since "2026-07-09 00:00:00"
Если лог показывает более подробную ошибку (например, command not found), исправьте её напрямую.
Профилактика
- Всегда тестируйте задания вручную перед тем, как они попадут в cron.
- Логируйте явно – добавляйте
> /var/log/job.log 2>&1ко всем важным заданиям. - Следите за
MAILTO– если вам не нужны почтовые уведомления, оставьте его пустым. - Регулярно проверяйте логи cron – используйте крон-задание для поиска новых записей
CRON output missing. - Используйте
*/bin/bashв начале crontab, чтобы обеспечить стабильную среду выполнения.
С помощью этих шагов вы быстро вернёте контроль над своими автоматизированными заданиями и предотвратите будущие «молчаливые» сбои.