Перейти к содержимому
EVI Solutions

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

Средне 20 мин Обновлено:

Краткий ответ

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

Как проявляется проблема

  • Задание не запускается в запланированное время
  • Нет ожидаемого вывода или файла
  • Лог cron пуст или показывает ошибки
  • Скрипт работает вручную, но не из cron
  • Уведомления об ошибках по электронной почте не приходят

Частые причины

Служба cron не запущена

Если демон cron не активен, ни одно задание не выполнится. Проверьте статус службы и запустите её при необходимости.

Неправильный синтаксис в crontab

Ошибка в полях времени или отсутствие завершающей строки может помешать выполнению. Проверьте формат и используйте `crontab -l`, чтобы увидеть активные задания.

Отсутствие права на выполнение

Скрипт должен иметь право на выполнение (`chmod +x`). Также проверьте, является ли владельцем пользователь, запускающий cron.

Неверный путь или окружение

Cron использует ограниченное окружение, поэтому относительные пути и переменные могут быть проблемой. Используйте абсолютные пути и явно определяйте переменные.

Проблемы с правами или владельцем

Файлы, к которым обращается скрипт, должны быть читаемы для пользователя cron. Проверьте права и владельца файлов и каталогов.

Пошаговое решение

  1. 1

    Проверьте, запущена ли служба cron

    Выполните systemctl status cron (или systemctl status crond в некоторых дистрибутивах). Если служба не активна, запустите её с помощью sudo systemctl start cron и включите автоматический запуск с помощью sudo systemctl enable cron.

  2. 2

    Просмотрите активные задания cron

    Выполните crontab -l, чтобы увидеть задания для текущего пользователя. Для системных заданий просмотрите файл /etc/crontab и каталог /etc/cron.d/. Убедитесь, что нет синтаксических ошибок.

  3. 3

    Протестируйте скрипт вручную

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

  4. 4

    Используйте абсолютные пути

    В crontab укажите полный путь к скрипту и интерпретатору, например /usr/bin/python3 /home/пользователь/скрипт.py. То же самое относится и к файлам, к которым обращается скрипт.

  5. 5

    Задайте переменные окружения

    В начало crontab добавьте PATH=/usr/bin:/bin и другие необходимые переменные. Вы также можете определить их внутри скрипта. Избегайте зависимости от переменных из интерактивной сессии.

  6. 6

    Проверьте права и владельца

    Убедитесь, что скрипт имеет право на выполнение (chmod +x скрипт.sh) и что пользователь, запускающий cron, имеет право читать и выполнять его. Проверьте также права на каталоги и файлы, которые использует скрипт.

  7. 7

    Просмотрите логи cron

    В системах с systemd-journald используйте journalctl -u cron или journalctl -u crond. В других системах просмотрите /var/log/syslog или /var/log/cron. Ищите ошибки, связанные с вашим заданием.

  8. 8

    Временно перенаправьте вывод в файл

    Добавьте >> /tmp/cron.log 2>&1 в конец строки в crontab, чтобы перехватить стандартный вывод и ошибки. Затем просмотрите файл после выполнения задания.

  9. 9

    Проверьте правильность времени

    Убедитесь, что системное время правильное (date). Если часовой пояс неверный, cron будет запускаться в неправильное время. Настройте часовой пояс и синхронизацию времени.

Если ничего не помогает

Если вы проверили все вышеперечисленное, а задание всё ещё не выполняется, попробуйте запустить cron в режиме отладки. Для Vixie cron ненадолго остановите службу и запустите её вручную с sudo cron -f -x proc (или соответствующей опцией для вашего cron); после теста снова запустите службу. Это покажет подробную информацию об обработке заданий. Также проверьте, нет ли ограничений через файлы /etc/cron.allow и /etc/cron.deny, которые могут помешать пользователю использовать cron. Наконец, рассмотрите альтернативу, такую как systemd timer, который предлагает лучшее логирование и управление.

Как избежать повторения

  • Регулярно проверяйте логи cron
  • Используйте абсолютные пути и явные переменные
  • Тестируйте скрипты перед добавлением в cron
  • Ограничивайте права и следите за владельцем файлов

Когда лучше обратиться к специалисту

Если вы не можете найти причину или у вас нет доступа к логам и системным файлам, обратитесь в ИТ-поддержку. Они смогут быстрее изолировать проблему и предотвратить простои в работе.

Обслуживание ИТ-инфраструктуры · Серверы, сети, резервное копирование, безопасность и helpdesk

Частые вопросы

Почему моё задание cron не выполняется, хотя синтаксис правильный?

Самая частая причина, отсутствие права на выполнение скрипта или неверный путь к интерпретатору. Проверьте, работает ли скрипт при ручном запуске и все ли пути абсолютные.

Как увидеть ошибки, которые сообщает cron?

Вы можете временно перенаправить вывод в файл, добавив `>> /tmp/cron.log 2>&1` в crontab. Также просмотрите системные логи, такие как `/var/log/syslog` или `journalctl -u cron`.

Cron и anacron, это одно и то же?

Нет. Cron предназначен для точного планирования, но не запустит пропущенные задания, если компьютер был выключен. Anacron создан для выполнения пропущенных заданий, но не гарантирует точное время.

Поделиться
Не нашли решение?ИИ-помощник работает 24/7. Опишите проблему или отправьте скриншот ошибки и получите инструкцию для вашего случая.Спросить ИИ-помощника