Крон будет работать каждую вторую среду?

9

Мне нужно найти способ справиться с работой так, чтобы она работала каждую вторую среду месяца. Это возможно?


источник
1
Этот вопрос выглядит, чтобы дать соответствующий ответ.
scurker
1
Да, но этот вопрос касается Тью, а не СР;) Хотя принятый ответ умный.
edoloughlin
>> Да, но этот вопрос о Ту, а не о Ср;) Принятый ответ умный, хотя ... что так трудно изменить с Ту на Ср?
ajreal
0 * * * 3 test $ (date \ +% u) -eq 3 && echo "start run me" попробуйте это. не вставил к ответу, потому что один вопрос лайнера довольно расплывчатый.

Ответы:

14

Моя man-страница для crontab (которую я, к сожалению, не могу найти в Интернете) дает следующий пример:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

Приспосабливая это к вашим целям ...

0 4 8-14 * *    test $(date +\%u) -eq 3 && job.sh
Hasturkun
источник
3
Для тех, кто хочет отредактировать этот ответ, причина, по которой вы не просто используете поле дня недели, состоит в том, что если и день месяца, и день недели ограничены (т. Е. Нет *), команда будет запущена, когда один из совпадений ,
Хастуркун
Страница
Марко Бискаро
1
Я обнаружил, что должен был сбежать из% u, поэтому:date +\%u
Антоний Д'Андреа
3

Вы можете избежать запуска внешнего скрипта, используя комбинацию дня недели и дня недели:

# Run on every second Wednesday of the month
0 4 8-14 * Wed job.sh

Это также позволяет избежать запуска другой внешней программы. 8-14 выбирает все дни, которые соответствуют второй неделе месяца. Тогда это отфильтровывает только ту среду.

Кайл Бергер
источник
1

Использование cron само по себе невозможно, но вы можете вызывать скрипт раз в неделю, который выполняет тест:

В crontab каждую секунду запускайте second_wed.sh в 12.00:

0 12 * * 3 /home/you/bin/second_wed.sh

В second_wed.sh:

#!/usr/bin/env bash
day_of_month=`date +"%
if [ $day_of_month -gt 7 -a $day_of_month -lt 15 ]; then
  # Call your program here instead of 'ls'…
  ls
fi
edoloughlin
источник
1

Основываясь на этом ответе, вы можете сделать:

00 12 * * Wed expr `date +\%d` \> 7 \& `date +\%d` \< 15 >/dev/null && runJob.sh
Сообщество
источник
1

Для серверов CentOS 7 этот синтаксис мне подходит. Обратите внимание на пробелы вокруг [и ]. Мне понадобилось время, чтобы понять.

test.shФайл запускается в 13:07 / 13:07 во вторую среду месяца. (0 = воскресенье, 1 = понедельник, 2 = вторник, 3 = среда и т. Д.)

07 13 8-14 * * [ `date +\%u` = 3 ] &&  /root/scripts/test.sh
eglescout
источник