Conversione cron cron a intervalli di tempo

4

Ho, sul server, molti lavori definiti dagli utenti e alcuni di questi sono programmati usando espressioni cron. Devo controllare (posso eseguire Groovy / Java sul server) se quei lavori impiegano più tempo di quanto sono programmati (intendo che il lavoro richiede 10 minuti, ma è programmato per funzionare ogni 5 minuti).

Ho cercato di trovare qualcosa che converta l'espressione cron in intervalli di tempo. Questo sembra fare un buon lavoro convertendo le espressioni di cron in stringhe leggibili dall'uomo, ma come ottenere l'intervallo di tempo più breve?

La soluzione ricorsivamente si ricollega da anni a secondi e si aggiunge ogni volta trovata per elencare, calcolare ogni intervallo di tempo e trovare il più piccolo da lì? O esiste un modo migliore?

Esempio, diciamo che abbiamo un'espressione cron: 0 0 11,16,19,21 * * * Questo si traduce in: Ogni anno ogni mese tutti i giorni alle 11:00, 16:00, 19:00 e 21:00. Questo ci dà intervalli: 5h, 3h, 2h e 14h. Mi interessa l'intervallo più breve - 2h.

Capisco che questo può diventare rapidamente molto complesso e portare a intervalli di gazillion, ma stavo guardando casualmente le espressioni che avrei bisogno di calcolare e sono piuttosto facili. In attesa di una risposta, ho scoperto la libreria Quartz . Posso dargli una espressione cron e semplicemente chiedergli "quando è il prossimo, quando è il prossimo ecc.". Quindi se dovessi chiedere ... diciamo 5 volte, probabilmente ho coperto la maggior parte dei miei casi. Devo controllare come si comporta. Se qualcuno ha una soluzione migliore, lo accolgo calorosamente.

    
posta Erki M. 24.09.2014 - 10:44
fonte

1 risposta

2

Se è necessario considerare più voci crontab per la stessa attività, sarà necessario ripetere un ciclo gregoriano completo di 400 anni. Ad esempio:

59 23 29 2 * me /home/me/mytask # 11:59 Feb 29
01 00  1 3 * me /home/me/mytask # 00:01 Mar 1

Questi eventi si verificano a distanza di due minuti ogni anno bisestile

Peggio:

59 23 29 2 * me /home/me/mytask # 11:59 Feb 29
01 00  * * 0 me /home/me/mytask # 00:01 Sunday

Questi eventi si verificano a distanza di due minuti quando sabato 29 febbraio cade.

Un altro caso difficile per i sistemi in cui il demone cron usa l'ora locale:

0 1,3 * * * me /home/me/mytask # 01:00 and 03:00

Questi lavori verranno eseguiti a distanza di due ore, tranne la mattina in cui inizia l'ora legale. Quella mattina correranno a un'ora di distanza.

    
risposta data 26.09.2014 - 01:01
fonte

Leggi altre domande sui tag