Notação de Expressão Cron

1

Eu quero escrever uma entrada crontab para executar a cada 30 minutos na última semana de cada mês. Eu sei fazer o último domingo, por exemplo, o cron é:

0 0/30 * ? * 0L

Quando tento separar por vírgula o campo do dia da semana da seguinte forma:

0 0/30 * ? * 0L,1L,2L,3L,4L,5L,6L 

Eu recebo um erro:

Support for specifying 'L' with other days of the week is not implemented

Existe uma maneira de dar uma mãozinha a esta expressão crontab, ou eu preciso fazer 7 entradas crontab separadas, cada uma com um dia diferente?

    
por MadHatter 19.03.2012 / 20:42

2 respostas

1

Como a mensagem de erro diz que você não pode fazer isso. Você precisará verificar seu script se hoje estiver na última semana do mês e sair / continuar conforme necessário.

#!/bin/bash

MonthDays=$(echo $(cal) | awk '{print $NF}')
Today=$(date '+%d')
let DaysLeft=MonthDays-Today

if [ $DaysLeft  -gt  6 ]
then
    exit 1
fi
echo "Run the rest of the script"

Como alternativa, você pode usar o script abaixo em seu crontab - salve-o como last-week

#!/bin/bash

MonthDays=$(echo $(cal) | awk '{print $NF}')
Today=$(date '+%d')
let DaysLeft=MonthDays-Today

if [ $DaysLeft  -gt  6 ]
then
    exit 1
fi

Use-o assim

0,30 * * * * last-week && your-script

O que diz executar your-script se o script last-week sair com status 0.

    
por 31.03.2012 / 21:31
1

E se você quiser real 'na semana passada' (a partir do último domingo do mês para o que for deixado), faça algumas alterações no script do @Iain:

#!/bin/bash

Today=$(date +%d)
LastSun=$(ncal | awk 'NR==2 { print $NF }')

if [ $Today -ge $LastSun ]
then
    exit 1
fi

Use da mesma maneira.

    
por 31.03.2012 / 22:32

Tags