CronJob ogni 25 minuti


13

Voglio sapere se esiste un modo più semplice per eseguire un lavoro ogni 25 minuti. In cronjob, se si specifica il parametro minute come * / 25, verrà eseguito solo al 25 ° e 50 ° minuto di ogni ora

Risposte:


15

Il comando in crontab viene eseguito con in /bin/shmodo da poter usare l'espansione aritmetica per calcolare se il minuto corrente modulo 25 è uguale a zero:

*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command

croneseguirà questa intera voce ogni 5 minuti, ma solo se il minuto corrente (in minuti dall'epoca) modulo 25 è uguale a zero verrà eseguito your_command.

Come altri hanno sottolineato, 1 giorno non è uniformemente divisibile per 25 minuti, quindi questo non farà your_commandfunzionare alla stessa ora ogni giorno, ma verrà eseguito ogni 25 minuti.


semplicemente geniale ...
Tomas

Nota che con l'implementazione cron dall'ISC almeno dovrai sfuggire a quei% caratteri con una barra rovesciata.
Stéphane Chazelas,

@ StéphaneChazelas, buon punto. Sono andato avanti e ho aggiunto le barre rovesciate prima dei segni di percentuale perché, per quanto ne so, ogni implementazione di cron lo richiede.
CODICE READ

7

La tua scommessa migliore è correre a 20 minuti o 30 minuti.

Il prossimo passo potrebbe essere quello di innescare ogni 5 minuti, quindi mantenere un conteggio o un timestamp interni ed eseguire ogni 5 ° trigger o se sono trascorsi 25 minuti dall'ultima corsa.

Sarebbe più complicato elaborare gli orari corretti per un giorno, a partire da mezzanotte, e accettare l'errore alla fine della giornata. Ciò implicherebbe la duplicazione della voce crontab nelle diverse ore.

Più complicato di questo sarebbe calcolare i tempi per un mese intero, il che implicherebbe molte copie della voce crontab per coprire le diverse combinazioni.

Finalmente puoi implementare il tuo sempre sul demone e farlo fare la pianificazione.


6

Non ho esperienza diretta con esso, ma fcron sembra fare ciò che vuoi fuori dalla scatola. Secondo la sua documentazione è possibile specificare le frequenze:

# Get our mails every 30 minutes 
@ 30 getmails -all 

# make some security tests every 48 hours of system up time, 
# force a mail to be sent to root even if there is no output 
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh

Dove vedi 25 minuti qui?
Philomath,

Usando fcron e @ 25 commanddovresti fare il trucco.
Caleb,

Grazie Caleb. Avrei dovuto creare un esempio su misura invece di sollevarne uno direttamente dalla documentazione.
che2cbs,

2

Permettetemi di spiegare in breve qual è il problema qui. L'immissione di 25 nel campo dei minuti provoca cronl'esecuzione quando i minuti dell'ora corrente equivalgono a 25, ovvero una volta ogni ora. È possibile inserire un elenco di corrispondenze, il problema è che 60 (minuti di un'ora) non sono divisibili per 25, quindi è necessario aggiungere più voci in base all'ora. Il minimo comune multiplo di 60 e 25 è 300, ovvero 5 * 60. Quindi dovrai scorrere 5 ore fino a tornare al punto di partenza originale. per esempio:

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...

Ma anche in questo caso, 24 (ore al giorno) non è divisibile per 5, il minimo comune multiplo di 5 e 24 è semplicemente 5 * 24 = 120. e così via e così via ...


Forse la risposta avrebbe dovuto essere un commento sulla domanda originale.
Philomath,

1

Puoi giocare con l'ora dell'ultima modifica di un file

  • Crea un piccolo script (ad esempio /usr/local/bin/age) che genererà l'età di un file:

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

Il tuo crontab sarebbe simile a questo (supponendo 25 minuti equivalgono a 1500 secondi se ho ragione)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

Si noti che io uso /var/tmpinvece che /tmpperché secondo l' FHS non dovrebbe essere cancellato allo spegnimento / avvio del sistema.


-2

Penso che il seguente dovrebbe funzionare 0 0/25 * * *?


Per quanto ne so funzionerà per ogni minuto.

Ciò verrebbe eseguito ogni ora una volta ogni ... 25 ore? 0/25 ... non sono nemmeno sicuro di ciò che fa, ma non è ciò che l'OP sta cercando.
Caleb,
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.