Назад | Перейти на главную страницу

проверка недопустимости времени crontab несовместима

Один из наших администраторов баз данных создал следующую запись в crontab для выполнения резервного копирования каждые 3 часа с 6:30 до полуночи каждый день:

30 6-24/3 * * * (path to backup script)

Cron принял запись, но не выполнил резервное копирование, как ожидалось. Я не системный администратор и не специалист по Linux. Мой анализ таков, что запись должна была быть (поскольку час никогда не равен 24):

30 6-23/3 * * * (path to backup script)
  1. Какая запись правильная? Если первая запись неверна, почему crontab разрешил администратору базы данных создать запись? Это должно было вызвать ошибку.
  2. Если бы я хотел создать запись для запуска резервного копирования каждые 3 часа с 6:30 до 23:30, как мне создать запись в crontab? Нет примера, который показывает временной диапазон, который заканчивается через полчаса.

редактировать: система - Oracle Enterprise Linux 5.

Скрипт запускался только один раз до 23:00. Я проведу еще несколько тестов и отправлю ответ. Я все еще не понимаю, как cron принял недопустимое значение для часа (24).

Это странно. Если я создам запись вроде:

30 6-24/3 * * * /bin/ls

Не могу сохранить crontab. Я получаю ошибку, что час плохой. Если я создам запись вроде:

30 6-24/4 * * * /bin/ls

Я могу сохранить запись. Это не имеет смысла. Час еще плохой и его принимают. Это ошибка или ожидаемое поведение?

MadHatter: Не стесняйтесь изменить заголовок сообщения и сообщить об ошибке. Как я уже сказал, я не эксперт по Linux, а просто человек, с которым мои коллеги обсуждают технические вопросы. Мне очень нравится этот сайт. Авторы хорошо осведомлены и готовы помочь.

Спасибо, Арун

Совершенно очевидно, что это ошибка, и, похоже, она влияет на системы Red Hat многих разновидностей. Я подтвердил описанное вами поведение в CentOS 5, C6, Fedora 19 и Fedora 20.

Для crontab записи формы

30 a-b/c * * *  /bin/ls

Кажется, что если не существует натурального числа n, для которого a+nc находится в диапазоне [24,b], проверка недействительности за последний час (b) неэффективен. То есть вы можете писать тарабарщину до тех пор, пока ОС на самом деле ничего с этим не делает; если вы укажете диапазон и интервал таким образом, чтобы он действительно запускал задание в недопустимый час (который включает 24) затем crontab жалуется.

Я только что убедил свою систему F20 принять crontab вход

30 6-33/16 * * *  /bin/ls

что безумие по любым стандартам. Так же, 30 2-33/14 * * * /bin/ls и 30 1-33/16 * * * /bin/ls оба дают (желательно) bad hour ошибка, а 30 2-27/14 * * * /bin/ls действует.

Поздравляю, Арун, я думаю, ты нашел добросовестный ошибка в Red Hat crontab (Это не присутствует в Ubuntu 12.04LTS, хотя это единственная другая система, которую я должен передать для тестирования). Вы хотите зарегистрировать это с помощью RH bugzilla, или я должен?

Заменить 24 на 0 (то есть 24), что касается второй записи, последнее задание будет выполняться в 21:30.

Вы также можете попробовать это:

30 0,6,9,12,15,18,21 * * * /path/to/script

полный синтаксис:

# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

#