STEADRUN

Как проверить, что cron выполняется

Обновлено 02.10.2026

Проверяйте сверху вниз. Сначала работает ли сам cron, потом видит ли он задачу, запускает ли её и чем она заканчивается. На каждом шаге одна-две команды.

Команды ниже для Linux с systemd: Ubuntu, Debian, CentOS, AlmaLinux. В Ubuntu и Debian сервис называется cron, в CentOS и AlmaLinux — crond.

Шаг 1. Запущен ли cron

systemctl status cron

В выводе должно быть active (running). Если cron остановлен, запустите его и включите автозапуск:

sudo systemctl enable --now cron

Шаг 2. Есть ли задача в crontab

crontab -l

Команда показывает crontab текущего пользователя. Задачи других пользователей так не видны. Если задача должна работать от deploy, а Вы зашли как root, смотрите так:

sudo crontab -u deploy -l

Задача может быть и в системных файлах: /etc/crontab и /etc/cron.d/. Найти её по имени скрипта можно так:

sudo grep -r backup.sh /etc/crontab /etc/cron.d/ /var/spool/cron/

Заодно проверьте само расписание. * 3 * * * и 0 3 * * * выглядят похоже, но первое запускает задачу 60 раз подряд. Разобрать выражение можно в руководстве о расписании cron.

Шаг 3. Запускает ли cron задачу

Cron пишет в системный журнал строку при каждом запуске. Посмотреть записи за последний час (в CentOS и AlmaLinux вместо cron пишите crond):

journalctl -u cron --since "1 hour ago"

Или в файле журнала, если он есть:

grep CRON /var/log/syslog   # Ubuntu, Debian
sudo tail /var/log/cron     # CentOS, AlmaLinux

Запись о запуске выглядит так:

CRON[48213]: (deploy) CMD (/home/deploy/backup.sh)

Если такой строки нет в то время, когда задача должна была запуститься, cron её не запускал. Значит, проблема в расписании, в crontab или в часовом поясе. Время в журнале указано в часовом поясе сервера, сравните его с расписанием.

Если строка есть, cron задачу запустил, и дальше нужно смотреть, чем она закончилась.

Шаг 4. Работает ли cron вообще

Если непонятно, виновата задача или cron, добавьте тестовую задачу, которая каждую минуту пишет время в файл:

* * * * * date >> /tmp/cron-test.log 2>&1

Через пару минут проверьте файл:

cat /tmp/cron-test.log

Если строки с датой появляются, cron работает, и дело в самой задаче. Не забудьте потом удалить тестовую строку из crontab.

Шаг 5. Чем закончилась задача

Чтобы видеть, что задача напечатала и с какой ошибкой упала, направьте её вывод в файл:

0 3 * * * /home/deploy/backup.sh >> /var/log/backup.log 2>&1

2>&1 нужен, чтобы в файл попадали и ошибки. После следующего запуска откройте /var/log/backup.log.

Частые ошибки, которые там окажутся:

  • command not found — у cron короткий PATH. Укажите полный путь к программе, его покажет which php;
  • Permission denied — у скрипта нет права на запуск (chmod +x backup.sh) или задача работает от пользователя, которому не хватает прав;
  • No such file or directory — скрипт открывает файлы по относительному пути, а cron запускает его из домашней папки. Добавьте cd в нужную папку перед командой.

Шаг 6. Запустить команду так, как её запускает cron

В терминале команда работает, а по cron нет — так бывает, потому что у cron другое окружение. Запустите команду с таким же коротким окружением:

env -i HOME="$HOME" SHELL=/bin/sh PATH=/usr/bin:/bin /bin/sh -c '/home/deploy/backup.sh'

Если и так упадёт, Вы увидите ошибку сразу, без ожидания следующего запуска. Обычно причина в PATH или в переменных окружения, которые есть в терминале, но не в cron.

Шаг 7. Узнавать о сбоях сразу

Всё, что выше, помогает разобраться, когда Вы уже знаете о проблеме. Но cron сам не сообщает, что задача упала или перестала запускаться. Журнал и лог нужно открывать самому, и на практике это делают, когда бэкап уже понадобился.

Надёжнее, когда задача сама сообщает, что отработала, а кто-то ждёт этого сообщения. Если оно не пришло вовремя, приходит алерт. Такой подход называют dead man's switch, и на нём работает Steadrun. В конец строки crontab добавляется запрос на адрес проверки:

0 3 * * * /home/deploy/backup.sh && curl -fsS -m 10 --retry 3 -o /dev/null https://steadrun.ru/ping/ВАШ-UUID

Если бэкап упадёт, зависнет или cron перестанет его запускать, запроса не будет, и Steadrun пришлёт алерт в Telegram или на почту. Настройка занимает пять минут, она описана в быстром старте. Бесплатно можно следить за пятью задачами.

Что дальше