Linux bad hourНизкая

Исправление ошибки cron: неверный час в расписании

Статья объясняет, что означает ошибка cron 'bad hour', почему она возникает и как исправить расписание crontab, чтобы задачи запускались в нужное время.

Обновлено 18 июля 2026 г.
5-10 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04 LTSUbuntu 22.04 LTSDebian 11CentOS 8

Что означает ошибка bad hour

Ошибка bad hour появляется в журнале событий cron, когда значение часа в записи crontab находится вне допустимого диапазона 0–23. Например, значение 25 или —1 вызовет у cron сообщение «bad hour», и запланированная задача не будет выполнена.

Feb 18 08:00:01 hostname CRON[1234]: (root) CMD (echo "test" >> /var/log/test.log)
Feb 18 09:00:01 hostname CRON[1235]: bad hour while reading /etc/crontab

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

  • Часовое значение вне диапазона – значение меньше 0 или больше 23 (например, 25 или -2).
  • Использование нестандартного формата – попытка задать час с помощью буквенного обозначения (Jan, Feb) или пробелов.
  • Повреждение файла crontab – случайное добавление символов, лишних запятых или скобок вокруг числового значения часа.
  • Неправильное копирование данных – при ручном редактировании файла с помощью текстового редактора копируется нечисловая часть (например, «час: 99»).

Способы решения

Способ 1: Редактирование crontab через crontab -e

  1. Просмотрите текущий графикcrontab -l.
  2. Откройте файл для редактированияcrontab -e.
  3. Найдите строку с неверным часом (обычно она отмечена в журнале).
  4. Исправьте значение часа – убедитесь, что оно находится в диапазоне 0–23.
  5. Сохраните и выйдите (Ctrl+O, Enter в nano; :wq в vim).

⚠️ Важно: Значения часов в cron отсчитываются от 0 (полночь) до 23 (последний час дня).

Способ 2: Использование sed для замены часа

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

# Замените любое значение часа, не соответствующее шаблону 0-23, на допустимое значение (например, 08)
crontab -l | sed -E 's/([0-9]{1,2})\s+([0-9]{1,2})/\1 \2/' | crontab -

sed удаляет лишние символы и приводит формат к стандартному виду. После выполнения команды проверьте результат: crontab -l.

Способ 3: Пересоздание crontab

  1. Сделайте резервную копиюcrontab -l > ~/cron_backup.txt.
  2. Удалите текущий графикcrontab -r (подтвердите удаление).
  3. Добавьте правильные заданияcrontab -e и введите нужные строки.

Способ 4: Переход на systemd timers (для продвинутых пользователей)

Для новых систем, использующих systemd, рекомендуется заменить cron-задания на таймеры:

# /etc/systemd/system/myjob.timer
[Unit]
Description=Запуск моей задачи каждый день в 09:00

[Timer]
OnCalendar=*-*-* 09:00:00
Persistent=true

[Install]
WantedBy=timers.target
# /etc/systemd/system/myjob.service
[Unit]
Description=Выполнение моей задачи

[Service]
ExecStart=/path/to/your/script.sh

Включите и запустите таймер:

systemctl enable myjob.timer
systemctl start myjob.timer

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

  • Проверяйте диапазоны перед сохранением – многие редакторы crontab имеют встроенную проверку; вы можете также использовать скрипт:
    crontab -l | while read line; do
      hour=$(echo "$line" | awk '{print $2}')
      if [[ $hour -lt 0 || $hour -gt 23 ]]; then
        echo "Неверный час в строке: $line"
      fi
    done
    
  • Ведите журнал изменений – храните копии crontab в /etc/cron.d/backup/, чтобы быстро восстановиться при ошибке.
  • Используйте инструменты автодополения – такие как crontab-gtk (в графическом интерфейсе) или плагины редактора, которые подсвечивают недопустимые значения.
  • Регулярно проверяйте логиjournalctl -u cron или /var/log/syslog помогут обнаружить ошибку сразу после её возникновения.

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

Почему cron выводит сообщение «bad hour»?
Можно ли исправить расписание, не используя редактор командной строки?
Что делать, если после исправления ошибка не исчезает?
Как предотвратить появление этой ошибки в будущем?

Полезное

Проверьте текущий график задач
Определите проблемную запись
Откройте crontab для редактирования
Исправьте значение часа
Сохраните и проверьте

Эта статья помогла вам решить проблему?