Cron in programma ogni 2 mercoledì?


9

Devo trovare un modo per cronizzare un lavoro in modo che venga eseguito ogni secondo mercoledì del mese. È possibile?

linux  cron 

1
Questa domanda sembra fornire una risposta appropriata.
scurker

1
Sì, ma quella domanda riguarda Mar, non Mer;) La risposta accettata è intelligente, però.
edoloughlin,

>> Sì, ma quella domanda riguarda martedì, non mercoledì;) La risposta accettata è intelligente, però ... cosa è così difficile cambiare da martedì a mercoledì?
Ajj

0 * * * 3 test $ (data \ +% u) -eq 3 && echo "start run me" prova questo. non è stato incollato alla risposta perché una domanda di copertina è piuttosto vaga.

Risposte:


14

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

3
Per chiunque cerchi di modificare questa risposta, il motivo per cui non si utilizza solo il campo del giorno della settimana è che se sia il giorno del mese che il giorno della settimana sono limitati (ovvero, non lo sono *), il comando verrà eseguito quando uno dei due corrisponde .
Hasturkun,


1
Ho scoperto che dovevo scappare da% u, quindi:date +\%u
Antony D'Andrea il

3

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ì.


1

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

1

Sulla base di questa risposta, potresti fare:

00 12 * * Wed expr `date +\%d` \> 7 \& `date +\%d` \< 15 >/dev/null && runJob.sh

1

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.shfile 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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.