Perché il mio cron job è stato eseguito questo mese?


31

Oggi è il 1 novembre 2016 o in cifre (non ambigue), 01/11/2016.

Ho un lavoro cron utente impostato in questo modo:

# m h  dom mon dow   command
33  3   1  */2  *    /home/user/...

Dovrebbe funzionare a giorni alterni il primo del mese alle 3:33, indipendentemente dal giorno della settimana, ma per qualche motivo è stato eseguito oggi, anche se 11 non è divisibile per 2.

Qualcuno può spiegarmi questo? La mia assunzione di divisibilità per 2 è sbagliata?

EDIT: Ho dimenticato di menzionare, sto eseguendo la cronversione "3.0pl1-127 + deb8u1" su una macchina "Jessie" di Debian 8.6.



Quindi stai parlando dell'11 ° giorno del 2016 ° mese dell'anno 1 allora. :) (L'ordine di data più comune in America è mese-giorno-anno.)
pulcini

@chicks controlla la cronologia delle modifiche di questa domanda, originariamente ho usato il formato che hai menzionato ;-)
comfreak

@chicks intendi mese / giorno / anno?
user253751

@immibis No. ... comfreak: lol
chicks

Risposte:


61

Non /è un'espressione aritmetica, ma descrive "valori di passaggio" nell'intervallo di valori consentito . Quindi, poiché i mesi iniziano sempre con 1invece di 0, /2significherebbe "prendere ogni altro valore", risultando (1, 3, 5, 7, 9, 11).

Questo è anche descritto nella pagina del manuale, anche se questo non è terribile chiaro e facile da capire:

I valori dei passi possono essere usati insieme agli intervalli. Seguire un intervallo con "<numero>" specifica i salti del valore del numero attraverso l'intervallo. Ad esempio, "0-23 / 2" può essere utilizzato nel campo delle ore per specificare l'esecuzione dei comandi ogni due ore (l'alternativa nella norma V7 è "0,2,4,6,8,10,12,14,16 , 18,20,22" ). I passaggi sono consentiti anche dopo un asterisco, quindi se vuoi dire "ogni due ore", usa "* / 2".


2
Grazie per la tua risposta, me ne sono reso conto da solo dopo aver letto di nuovo la pagina man e averlo lavorato nella mia testa. Di solito lavoravo solo con lavori cron a breve termine in cui i numeri iniziano con 0 e la mia ipotesi in realtà ha senso in un certo senso.
comfreak

18
Ho solo riflettuto sul perché questa domanda non viene posta più spesso e sono giunto alla stessa conclusione: perché poche persone eseguono lavori con qualcosa di diverso da un "*" nel campo del mese.
Sven

Una domanda, cosa accadrebbe se il numero non si divide, ad esempio */5? Sarebbe 1,6,11,1,6 ... o sarebbe 1,6,11,4,9 ...? Ho ipotizzato che "oltre l'intervallo consentito di valori" significhi che non ha memoria, ma ora non ne ero così sicuro.
MariusSiuram,

@MariusSiuram: la prima variante. Ancora una volta, questa non è un'operazione aritmetica. crondprende solo l'elenco dei possibili valori, applica il selettore passi una volta e quindi usa ripetutamente questi risultati.
Sven

4

Oggi è il primo giorno di novembre.

* / 2 significa che il tuo cronjob verrà eseguito ogni due mesi come dici tu.

Quindi il prossimo mese (dicembre) il cronjob non verrà eseguito, ma il mese (gennaio) successivo.

Il mese prima di questo mese (ottobre) il cronjob non è stato eseguito. Ma a settembre lo era.


1
Quindi pensi che */2nel campo del mese sia equivalente a 1-11/2, piuttosto che 2-12/2. Non sto dicendo che ti sbagli, ma puoi produrre documentazione di supporto?
MadHatter supporta Monica il

@MadHatter Sven l'ha spiegato bene.
Orphans

1
Sono d'accordo e, soprattutto, ha citato fonti autorevoli.
MadHatter supporta Monica il

2
Solo sottolineando, settembre precede ottobre e non agosto ;-)
hjpotter92
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.