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

Cron запускать каждую вторую среду?

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

Моя страница руководства для 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