Devo trovare un modo per cronizzare un lavoro in modo che venga eseguito ogni secondo mercoledì del mese. È possibile?
Devo trovare un modo per cronizzare un lavoro in modo che venga eseguito ogni secondo mercoledì del mese. È possibile?
Risposte:
La mia manpage per crontab (che purtroppo non riesco a trovare online) fornisce il seguente esempio:
# Run on every second Saturday of the month
0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday"
Adattandolo ai tuoi scopi ...
0 4 8-14 * * test $(date +\%u) -eq 3 && job.sh
*
), il comando verrà eseguito quando uno dei due corrisponde .
date +\%u
Puoi evitare di eseguire uno script esterno utilizzando una combinazione del trucco del giorno della settimana più il giorno della settimana:
# Run on every second Wednesday of the month
0 4 8-14 * Wed job.sh
Questo evita anche di eseguire un altro programma esterno. L'8-14 seleziona tutti i giorni corrispondenti alla seconda settimana del mese. Quindi filtra solo quel mercoledì.
Non è possibile utilizzare cron da solo, ma è possibile chiamare uno script una volta alla settimana che esegue il test:
In crontab, esegui second_wed.sh alle 12.00 ogni mercoledì:
0 12 * * 3 /home/you/bin/second_wed.sh
In 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
Per i server CentOS 7, questa sembra essere la sintassi che funziona per me. Si prega di notare gli spazi attorno al [
e ]
. Mi ci è voluto un po 'per capire.
Questo esegue il test.sh
file alle 13:07 / 13:07 il secondo mercoledì del mese. (0 = domenica, 1 = lunedì, 2 = martedì, 3 = mercoledì, ecc.)
07 13 8-14 * * [ `date +\%u` = 3 ] && /root/scripts/test.sh
Fuoco alle 10:15 il terzo venerdì di ogni mese: 0 15 10 ? * 6#3
Fonte: https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm