Один из наших администраторов баз данных создал следующую запись в crontab для выполнения резервного копирования каждые 3 часа с 6:30 до полуночи каждый день:
30 6-24/3 * * * (path to backup script)
Cron принял запись, но не выполнил резервное копирование, как ожидалось. Я не системный администратор и не специалист по Linux. Мой анализ таков, что запись должна была быть (поскольку час никогда не равен 24):
30 6-23/3 * * * (path to backup script)
редактировать: система - 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
#