Expressão do Cron a ser executada no 6º e 8º dia útil

0

Estou criando uma expressão cron que precisa ser executada a cada 30 minutos apenas em um intervalo de dias úteis, por exemplo: 6º, 7º e 8º dias úteis de um mês.

Atualmente, tenho uma expressão cron, mas isso é executado apenas nos sexto, sétimo e oitavo dias do mês, independentemente de ser um dia útil ou não.

Expressão cron atual - 0 0/30 * 6-8 *?

Eu tentei usar a expressão de dia útil mais próximo 0 0/30 * 6W *? mas não funciona durante vários dias - como de 6W-8W .

Qualquer ajuda nesse sentido é muito apreciada.

P.S: Não quer fazer isso usando um script.

    
por user3087291 07.03.2018 / 10:36

1 resposta

0

Você não pode (ou pelo menos eu não sou inteligente o suficiente para ver como).

Existem restrições no cron-tab que permitem escolher dia do mês e dia da semana .

Todos os dias úteis seriam dia da semana 1-5, mas isso não é suficiente porque você precisa contar ou expressar

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

Então você precisa de um script.

$ 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

Novembro de 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
    
por 17.11.2018 / 19:08