Crontab Синтаксис дня недели

204

В crontab поле День недели начинается с 0 - 6или 1 -7?

Я вижу противоречивую информацию по этому вопросу. Википедия заявляет 0-6и другие сайты, которые я видел 1-7.

Кроме того, что будет подразумеваться или либо использовать 0или 7неправильно? т. е. будет ли работать cron?

Марти Уоллес
источник

Ответы:

373

0и 7оба стоят в воскресенье, вы можете использовать тот, который вы хотите, поэтому запись 0-6 или 1-7 дает тот же результат.

Кроме того, как предлагает @Henrik, можно заменить числа сокращенным названием дней, например MON, THUи т. Д.

0 - Sun      Sunday
1 - Mon      Monday
2 - Tue      Tuesday
3 - Wed      Wednesday
4 - Thu      Thursday
5 - Fri      Friday
6 - Sat      Saturday
7 - Sun      Sunday

Графически:

 ┌────────── minute (0 - 59)
 │ ┌──────── hour (0 - 23)
 │ │ ┌────── day of month (1 - 31)
 │ │ │ ┌──── month (1 - 12)
 │ │ │ │ ┌── day of week (0 - 6 => Sunday - Saturday, or
 │ │ │ │ │                1 - 7 => Monday - Sunday)
 ↓ ↓ ↓ ↓ ↓
 * * * * * command to be executed

Наконец, если вы хотите указать день за днем, вы можете разделять дни запятыми, например SUN,MON,THU, команда будет исполняться только по воскресеньям, по понедельникам по четвергам.

Вы можете прочитать более подробную информацию в статье Википедии о Cron .

Федорки "ТАК прекратить вредить"
источник
4
хорошо, это то, что я не осознавал, что воскресенье может быть 0 или 7. спасибо
Марти Уоллес
15
Имейте в Sat-Sun6-7Sat,Sun
виду,
Можете ли вы подтвердить, что это без учета регистра? Переключение несколько раз между SUN, Sun, Sundayв своем ответе
MichaelChirico
1
@MichaelChirico о, хорошая мысль. Проверка статьи Википедии о Cron, которую я прочитал Сокращения месяца и дня недели не чувствительны к регистру .
Федорки "ТАК прекрати вредить"
104
    :-) Sunday    |    0  ->  Sun
                  |  
        Monday    |    1  ->  Mon
       Tuesday    |    2  ->  Tue
     Wednesday    |    3  ->  Wed
      Thursday    |    4  ->  Thu
        Friday    |    5  ->  Fri
      Saturday    |    6  ->  Sat
                  |  
    :-) Sunday    |    7  ->  Sun

Как вы можете видеть выше, и, как сказано выше, номера 0и 7оба назначены на воскресенье. В списке перечислены также сокращенные дни недели на английском языке, которые также можно использовать в crontab.

Примеры использования номера или сокращения

15 09 * * 5,6,0             command
15 09 * * 5,6,7             command
15 09 * * 5-7               command
15 09 * * Fri,Sat,Sun       command

Четыре примера делают все то же самое и выполняют команду каждую пятницу, субботу и воскресенье в 9.15.

В деталях

Наличие двух чисел 0и 7воскресенья может быть полезно для написания диапазонов дней недели, начиная с 0или заканчивая 7. Таким образом, вы можете записывать диапазоны, начиная с воскресенья или заканчивая им, например 0-2или 5-7например (диапазоны должны начинаться с меньшего числа и заканчиваться более высоким). Сокращения нельзя использовать для определения диапазона дня недели.

Хенрик
источник
1
Для ясности: «Сокращения нельзя использовать для определения диапазона дня недели». Утверждение здесь, кажется, является способом сказать, что нельзя разделять аббревиатуры через дефис-минус символы, только запятые. Другими словами, Fri,Sat,Sunне может быть сокращено до Fri-Sun.
Патрик Дарк
8

Вы также можете использовать названия дней, например, Monдля понедельника, Tueвторника и т. Д. Это более удобно для человека.

Кирилл Буторс
источник
Это не будет работать для некоторых дистрибутивов; тестируя Ubuntu 14.04.3 LTS, я получил "/tmp/crontab.Nuq9GE/crontab":24: плохой день недели"
0x4B1D
3
@Nikita проверить на наличие опечаток или лишних пробелов. У меня есть и «Пн-Пт», и «Чт» в моем crontab на Ubuntu 14.04.3, и оба прекрасно работают. Я подозреваю, что если между любыми символами будет пробел, вы получите ошибку.
Дейл Андерсон