Мне нужно найти способ настроить задание, чтобы оно выполнялось каждую вторую среду месяца. Это возможно?
Моя страница руководства для 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
Для серверов CentOS 7 это синтаксис, который мне подходит. Обратите внимание на пробелы вокруг [
и ]
. Мне потребовалось время, чтобы понять.
Это запускает test.sh
файл в 13:07 / 13:07 во вторую среду месяца. (0 = воскресенье, 1 = понедельник, 2 = вторник, 3 = среда и т. Д.)
07 13 8-14 * * [ `date +\%u` = 3 ] && /root/scripts/test.sh
Вы можете избежать запуска внешнего скрипта, используя комбинацию трюка дня недели и дня недели:
# Run on every second Wednesday of the month
0 4 8-14 * Wed job.sh
Это также позволяет избежать запуска другой внешней программы. 8-14 выбирает все дни, соответствующие второй неделе месяца. Затем он отфильтровывает только ту среду.
Невозможно использовать 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
На основе этот ответ, вы могли бы сделать:
00 12 * * Wed expr `date +\%d` \> 7 \& `date +\%d` \< 15 >/dev/null && runJob.sh
Запускается в 10:15 в третью пятницу каждого месяца: 0 15 10 ? * 6#3
Источник: https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm