Linux cron-syntaxВысокая

Ошибка синтаксиса cron в Linux: как исправить и предотвратить

Эта статья объясняет, что вызывает ошибки синтаксиса в cron, и предоставляет пошаговые решения для их исправления на Linux.

Обновлено 8 апреля 2026 г.
5-10 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 18.04+Debian 10+CentOS 7+Fedora 30+

Что означает ошибка синтаксиса cron

Ошибка синтаксиса cron (часто отображается как bad syntax или error in crontab file) возникает, когда строка в файле crontab не соответствует ожидаемому формату. Это означает, что планировщик cron не может интерпретировать расписание или команду, и задача не будет выполнена. Ошибка обычно появляется при попытке сохранить crontab с помощью crontab -e или при попытке загрузить новый файл через crontab файл. Система может вывести сообщение с указанием номера строки или просто сообщить об общей синтаксической ошибке.

Причины возникновения

Ошибки синтаксиса cron обычно вызваны следующими конкретными причинами:

  1. Неправильное количество полей: В каждой строке crontab должно быть ровно 5 полей времени (минуты, часы, день месяца, месяц, день недели) и одно поле команды, разделенные пробелами или табуляцией. Отсутствие или избыток полей вызывает ошибку.
  2. Недопустимые значения времени: Значения должны находиться в заданных диапазонах: минуты (0–59), часы (0–23), день месяца (1–31), месяц (1–12), день недели (0–7, где 0 и 7 — воскресенье). Например, значение 60 для минут или 13 для месяца недопустимо.
  3. Неверные разделители: Использование запятых, точек с запятой или других символов вместо пробелов/табуляции между полями. Допускаются только пробелы и табы.
  4. Отсутствие команды: После полей времени должна следовать команда или скрипт. Пустая строка или строка только с временем без команды вызовет ошибку.
  5. Специальные символы без экранирования: Символы like %, $, \ в команде могут интерпретироваться cron неправильно. Их нужно экранировать или заключать в кавычки.
  6. Некорректные символы подстановки: Использование *, ,, -, / в недопустимых контекстах. Например, */60 в минутах недопустимо, так как минуты только до 59.

Способ 1: Исправление вручную через crontab -e

Этот способ подходит для быстрого исправления ошибок в текущем пользовательском crontab.

  1. Откройте терминал и введите команду:
    crontab -e
    
    Это откроет crontab в редакторе по умолчанию (обычно vi или nano).
  2. Найдите строку, которая вызывает ошибку. Если вы только что сохраняли и получили сообщение об ошибке, редактор останется открытым, и строка часто будет выделена или указан её номер.
  3. Проверьте формат строки. Пример правильного формата:
    # минуты часы день_месяца месяц день_недели команда
    0 2 * * * /usr/bin/backup.sh
    
    Убедитесь, что между полями только пробелы или табы, а команда указана полностью с абсолютным путем.
  4. Внесите необходимые исправления: добавьте/удалите поля, исправьте значения, замените разделители.
  5. Сохраните файл и выйдите из редактора. Для nano нажмите Ctrl+X, затем Y и Enter. Для vi нажмите Esc, введите :wq и Enter.
  6. Если синтаксис исправлен, crontab обновится без ошибок. Если ошибка останется, система снова уведомит вас — повторите проверку.

⚠️ Важно: Всегда используйте абсолютные пути к командам и скриптам (например, /usr/bin/python3 вместо python3), так как cron имеет минимальное окружение.

Способ 2: Замена crontab через файл

Этот метод полезен, если вы хотите полностью заменить текущий crontab исправленной версией, особенно при переносе задач между системами.

  1. Создайте новый файл с правильным синтаксисом, например mycron:
    nano mycron
    
  2. Добавьте все необходимые задачи в корректном формате. Пример:
    # Ежедневный бэкап в 2:00
    0 2 * * * /usr/local/bin/backup.sh
    
    # Проверка диска каждую субботу в 3:30
    30 3 * * 6 /usr/bin/check-disk.sh
    
    Убедитесь, что нет пустых строк или строк с комментариями без # в начале.
  3. Сохраните и закройте файл.
  4. Загрузите crontab из этого файла:
    crontab mycron
    
  5. Если в файле есть синтаксические ошибки, команда crontab завершится с ошибкой, и текущий crontab не изменится. Исправьте ошибки в файле mycron и повторите загрузку.
  6. После успешной загрузки проверьте текущий crontab:
    crontab -l
    

Способ 3: Валидация с помощью онлайн-инструментов

Если вы не уверены в синтаксисе конкретной строки, используйте онлайн-валидаторы для проверки перед обновлением crontab.

  1. Скопируйте строку cron, которая вызывает подозрения (например, 0 2 * * * /path/to/script).
  2. Перейдите на надежный сайт-валидатор, такой как crontab.guru или cronmaker.com.
  3. Вставьте строку в поле для проверки. Валидатор покажет, как интерпретируется расписание, и укажет на ошибки, если они есть (например, недопустимые значения).
  4. Исправьте строку согласно рекомендациям валидатора. Например, если вы указали 60 в минутах, замените на 0 или корректное значение.
  5. Обновите crontab, используя исправленную строку через crontab -e или загрузку файла.
  6. Убедитесь, что crontab сохранился без ошибок.

💡 Совет: Онлайн-валидаторы также помогают понять, как работает cron-синтаксис, и могут быть полезны для обучения.

Способ 4: Анализ логов cron для диагностики

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

  1. Откройте терминал и проверьте системные логи. На большинстве дистрибутивов Linux логи cron находятся в /var/log/syslog или /var/log/cron. Для просмотра используйте:
    sudo grep CRON /var/log/syslog
    
    Или, если логи в отдельном файле:
    sudo grep CRON /var/log/cron
    
  2. В выводе ищите записи с ключевыми словами error, bad syntax или invalid. Пример строки:
    Apr 8 10:00:01 hostname CRON[12345]: (username) ERROR (bad syntax)
    
    Иногда указывается номер строки в crontab.
  3. Если номер строки не указан, сравните время ошибки с вашим crontab (crontab -l), чтобы найти проблемную запись.
  4. Исправьте identified строку, следуя рекомендациям из раздела «Причины возникновения».
  5. После исправления перезапустите службу cron, чтобы убедиться, что изменения применены (особенно для системного crontab /etc/crontab):
    sudo systemctl restart cron
    
    Для некоторых дистрибутивов имя службы может отличаться (например, crond).
  6. Проверьте логи снова, чтобы убедиться, что ошибок больше нет.

Профилактика

Чтобы избежать ошибок синтаксиса cron в будущем, следуйте этим практикам:

  • Всегда используйте абсолютные пути для команд и скриптов в crontab. Cron имеет ограниченное окружение, и относительные пути могут не работать.
  • Тестируйте команды вручную перед добавлением в cron. Запустите их в терминале, чтобы убедиться в отсутствии ошибок и правильных правах доступа.
  • Используйте валидаторы для проверки синтаксиса новых строк cron, особенно при сложных расписаниях с символами подстановки.
  • Документируйте задачи с помощью комментариев (начинайте строку с #). Это поможет быстро понять, что делает каждая задача, и упростит отладку.
  • Регулярно проверяйте логи cron (например, раз в неделю) на наличие ошибок, даже если задачи, кажется, работают.
  • Избегайте специальных символов в командах без необходимости. Если они требуются, экранируйте их с помощью обратного слеша (\) или заключайте команду в кавычки.
  • Для сложных задач рассмотрите использование скриптов-оберток, где логика вынесена в отдельный файл, а в crontab указывается только вызов скрипта. Это упрощает отладку.

Часто задаваемые вопросы

Что такое ошибка синтаксиса cron и почему она возникает?
Как проверить crontab на синтаксические ошибки?
Можно ли использовать cron на разных дистрибутивах Linux одинаково?
Как избежать ошибок синтаксиса при создании cron-задач?

Полезное

Определите источник ошибки
Исправьте синтаксис строки
Проверьте команду
Обновите crontab
Мониторьте выполнение