Я создаю выражение cron, которое должно запускаться каждые 30 минут только в течение ряда рабочих дней, например: 6-го, 7-го и 8-го рабочих дней месяца.

В настоящее время у меня есть выражение cron, но оно работает только 6-го, 7-го и 8-го числа месяца, независимо от того, будет ли это рабочий день или нет.

Текущее выражение cron - 0 0/30 * 6-8 *?

Я пытался использовать выражение ближайшего рабочего дня 0 0/30 * 6W *? но это не работает в течение ряда дней - как от 6W-8W.

Любая помощь в этом отношении высоко ценится.

PS: не хочу делать это с помощью сценария.

1 ответ1

0

Вы не можете (или, по крайней мере, я недостаточно умен, чтобы понять, как это сделать).

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

Все рабочие дни будут днями недели 1-5, но этого недостаточно, потому что вам нужно сосчитать или выразить

6th, 7th, 8th day of (days-of-week:1-5) in this month

Итак, вам нужен сценарий.

$ cat /home/jaroslav/tmp/workday-567.sh
#!/bin/bash

jan01() { date +%s -d `date +%Y-01-01`; }
december() { echo $(($(jan01) + 365*24*3600)); }
day=`jan01`; december=`december`; 
today=${1:-$(date '+%Y-%m-%d')}

this_months_678th=$(
while [ $day -lt $december ];do
    date '+%Y-%m-%d %B %A %u' -d@$day;
    let day=$day+86400; 
done  |
sort -u |
sed -e "/[67]$/d; /$(date '+%Y-%m')/!d" |
sed -n -e '6p; 7p; 8p'
)

if echo -e "$this_months_678th" | grep -q $today; then
    exit 0
fi
exit 1

Ноябрь 2018 года;

$ for i in 2018-11-{01..31}; 
    do bash /home/jaroslav/tmp/workday-567.sh $i && echo run on $i;
  done 
run on 2018-11-08
run on 2018-11-09
run on 2018-11-12

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