Что означает ошибка "Cron service not running"
Ошибка "cron service not running" (или её русскоязычный аналог "служба cron не запущена") означает, что демон cron — системная служба, отвечающая за выполнение задач по расписанию — не активен в данный момент. Без работающего демона файлы crontab, в которые вы добавляете задания (например, через crontab -e), не будут выполняться. Вы можете увидеть эту проблему, когда:
- Задачи, которые должны были сработать, не выполняются.
- При попытке добавить задание через
crontab -eвыводится предупреждение. - Команда
systemctl status cron(илиservice cron status) показывает состояниеinactive (dead)илиstopped. - В логах (
/var/log/syslogилиjournalctl -u cron) отсутствуют записи о запуске задач.
Причины возникновения
- Служба не была запущена после установки. В некоторых дистрибутивах (например, минимальных установках) служба cron по умолчанию не активируется.
- Служба была вручную остановлена. Администратор или скрипт мог выполнить
systemctl stop cron. - Сбой службы. Демон cron аварийно завершился из-за повреждённой конфигурации (
/etc/crontab, файлы в/etc/cron.d/) или нехватки системных ресурсов. - Служба не включена в автозагрузку. После перезагрузки системы cron не стартует автоматически.
- Использование устаревшей системы инициализации (SysVinit) с отсутствующими символическими ссылками. В системах, использующих старый init, могут отсутствовать необходимые ссылки в
/etc/rc?.d/.
Способ 1: Запуск и включение в автозагрузку через systemd (современные системы)
Большинство современных дистрибутивов (Ubuntu 16.04+, Debian 8+, CentOS 7+, RHEL 7+) используют systemd.
- Проверьте статус службы:
systemctl status cron
Или, если служба называетсяcrond(часто в RHEL/CentOS/Fedora):systemctl status crond
В выводе ищите строкуActive:. Если она говоритinactive (dead)илиfailed, служба не работает. - Запустите службу немедленно:
sudo systemctl start cron
Или дляcrond:sudo systemctl start crond - Включите автозагрузку службы:
sudo systemctl enable cron
Эта команда создаст символические ссылки, гарантирующие запуск cron при каждой загрузке системы. Дляcrondиспользуйтеsudo systemctl enable crond. - Перезапустите службу для применения изменений (если меняли конфиги):
sudo systemctl restart cron - Убедитесь, что служба активна и включена:
systemctl is-active cron && echo "Active" || echo "Not active" systemctl is-enabled cron && echo "Enabled" || echo "Not enabled"
Способ 2: Управление через утилиту service (универсальный обёртка)
Утилита service является обёрткой, которая автоматически определяет, используется ли в системе systemd или классический SysVinit, и вызывает соответствующий инструмент. Она может быть удобна для написания скриптов, работающих на разных системах.
- Проверьте статус:
sudo service cron status - Запустите службу:
sudo service cron start - Включите автозагрузку (для SysVinit):
sudo update-rc.d cron defaults
Примечание: В системах на systemd командаsudo service cron enableобычно просто вызываетsystemctl enableи работает идентично Способу 1. - Остановите службу:
sudo service cron stop
Способ 3: Ручное управление для SysVinit (старые системы)
В очень старых дистрибутивах (например, CentOS 6, Debian 7) или в специальных контейнерах может использоваться классический init.
- Проверьте, есть ли скрипт инициализации:
ls -l /etc/init.d/cron
Если файл отсутствует, служба cron, скорее всего, не установлена. - Запустите службу напрямую:
sudo /etc/init.d/cron start - Включите автозагрузку через
update-rc.d(Debian/Ubuntu) илиchkconfig(RHEL/CentOS 6):- Для Debian/Ubuntu:
sudo update-rc.d cron defaults - Для RHEL/CentOS 6:
sudo chkconfig cron on
- Для Debian/Ubuntu:
Способ 4: Диагностика, если служба не запускается или сразу падает
Если команды запуска не приводят к успеху, а status показывает failed:
- Просмотрите логи systemd для службы:
sudo journalctl -u cron -b --no-pager
Ключевые флаги:-u cron(фильтр по юниту),-b(логи с последней загрузки). Ищите строки сFailedилиError. - Проверьте целостность конфигурационных файлов cron:
- Основной файл:
/etc/crontab. - Директории:
/etc/cron.d/,/etc/cron.hourly/,/etc/cron.daily/,/etc/cron.weekly/,/etc/cron.monthly/. - Проверьте синтаксис. Частые ошибки: неверный разделитель (в
/etc/crontab5 полей, а не 6), отсутствие пользователя в строке, несуществующий путь к команде. - Протестируйте синтаксис (для некоторых версий):
sudo crontab -l -u root 2>/dev/null || echo "Проверьте /etc/crontab вручную"
- Основной файл:
- Убедитесь в наличии свободного места на диске:
df -h /
Если диск заполнен (>95%), демон может не стартовать. - Проверьте, не конфликтует ли с другим ПО. Иногда пакеты вроде
anacronмогут влиять на поведение. Попробуйте временно переименовать каталог/etc/cron.d/и перезапустить службу для проверки.
Профилактика
- Регулярно проверяйте статус службы после обновлений системы или изменений в конфигурации.
systemctl is-active cron || echo "Cron is down!" - Не редактируйте системные crontab-файлы (
/etc/crontab,/etc/cron.d/*) напрямую без предварительной проверки синтаксиса. Используйтеcrontab -eдля пользовательских заданий. - Перед перезагрузкой после настройки cron убедитесь, что служба включена в автозагрузку:
systemctl is-enabled cron. - Настройте мониторинг. Добавьте простую проверку статуса cron в систему мониторинга (Zabbix, Nagios, Prometheus node_exporter) или в скрипт, который запускается чаще, чем раз в минуту.
- Следите за место на системном разделе. Заполненный корневой раздел (
/) — частая причина сбоев системных служб.