1

Я написал запись в crontab как:

00 19 1-7 * 3 /sbin/init 0

Это должно выключить мой сервер Linux в первую среду каждого месяца. К сожалению, сервер отключился сегодня (четверг). Может кто-нибудь, пожалуйста, скажите мне, почему это произошло так, и, пожалуйста, скажите мне, как я могу это исправить.

1 ответ1

6

Из crontab (5):

   Note: The day of a command's execution can be specified by two fields --
   day of month, and day of week.  If  both  fields  are  restricted  (ie,
   aren't  *),  the command will be run when either field matches the cur-
   rent time.

Это означает, что ваша запись в crontab не будет работать должным образом. Команда будет выполняться каждый день с 1-го по 7-е число каждого месяца, а также каждую среду.

Из-за вышесказанного, cron один не сможет решить, будет ли это первая среда месяца или нет. Однако вы можете проверить одно условие с помощью cron, а другое - с помощью test и date:

00 19 1-7 * * [ $(/usr/bin/date +\%w) = 3 ] && /sbin/init 0

Как это устроено:

  • Команда будет выполняться каждый день с 1 по 7 число месяца.

  • $(/usr/bin/date +\%w) возвращает день недели.

  • [ ... = 3 ] && проверяет, является ли этот будний день средой (3).

  • Если это так, /sbin/init 0 выполняется.

Обратите внимание, что вы должны экранировать знак процента, так как он является особенным для cron.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .