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

Что не так с этими crontab?

Я хочу, чтобы мои проекторы включались до открытия торгового центра и выключались, когда торговый центр закрывается. Итак, я создал записи crontab (которые я поместил в /etc/cron.d/mall), но сегодня (Thu Nov 22 18:58:29 EST 2012 текущий date на этом сервере) сценарий power-off.sh был выполнен в 17:20 (см. отрывок из системного журнала ниже).

В четверг, 22 ноября, я ожидал, что скрипт power-off.sh будет выполнен в 21:20, согласно 4-й строке crontab ниже.

Почему power-off.sh сработал в 17:20? Что не так с моими записями в crontab?

Содержание /etc/cron.d/mall:

40  9 22-30 Nov Mon-Sat myuser /usr/local/projectors/power-on.sh
40 10 22-30 Nov Sun     myuser /usr/local/projectors/power-on.sh

20 18 22-30 Nov Mon-Wed myuser /usr/local/projectors/power-off.sh
20 21 22-30 Nov Thu-Fri myuser /usr/local/projectors/power-off.sh
20 17 22-30 Nov Sat-Sun myuser /usr/local/projectors/power-off.sh

40  9  1-22 Dec Mon-Sat myuser /usr/local/projectors/power-on.sh
40 10  1-22 Dec Sun     myuser /usr/local/projectors/power-on.sh

20 21  1-22 Dec Mon-Fri myuser /usr/local/projectors/power-off.sh
20 17  1-22 Dec Sat-Sun myuser /usr/local/projectors/power-off.sh

Отрывок из системного журнала:

$ grep power-off.sh /var/log/syslog
Nov 22 17:20:01 lanner-ubu-c2d CRON[23007]: (myuser) CMD (/usr/local/projectors/power-off.sh)

Я думаю, что он не справится Sat-Sun из-за этого на странице руководства crontab(5):

Names can also be used for the ``month'' and ``day of week'' fields.   Use
the  first three letters of the particular day or month (case doesn't mat‐
ter).  Ranges or lists of names are not allowed.

Это означает, что некоторые из ваших строк просто неверны и, вероятно, вызовут неожиданное или, по крайней мере, недокументированное поведение.

Поэтому я предлагаю вам изменить лимиты дней недели на числа.

Из справочной страницы crontab (5):

Примечание. День выполнения команды можно указать в двух полях: день месяца и день недели. Если оба поля ограничены (т. Е. Не *), команда будет запущена, когда одно из полей соответствует текущему времени. Например, 30 4 1,15 * 5 вызовет выполнение команды в 4:30 утра 1 и 15 числа каждого месяца, а также каждую пятницу.