Dzisiaj jest 1 listopada 2016 r. Lub cyframi (jednoznacznymi), 01.11.2016.
Mam skonfigurowane zadanie CRON użytkownika:
# m h dom mon dow command
33 3 1 */2 * /home/user/...
Powinien być uruchamiany co drugi miesiąc pierwszego miesiąca o godzinie 3:33, bez względu na to, jaki jest dzień tygodnia, ale z jakiegoś powodu został uruchomiony dzisiaj, mimo że 11 nie jest podzielne przez 2.
Czy ktoś może mi to wyjaśnić? Czy moje założenie podzielności przez 2 jest błędne?
EDYCJA: Zapomniałem wspomnieć, że używam cron
wersji „3.0pl1-127 + deb8u1” na maszynie Debiana 8.6 „Jessie”.
Odpowiedzi:
Nie
/
jest wyrażeniem arytmetycznym, lecz opisuje „wartości kroku” w dozwolonym zakresie wartości. Zatem, ponieważ miesiące zawsze zaczynają się1
od0
,/2
oznaczałoby „bierz co drugą wartość”, co powoduje (1, 3, 5, 7, 9, 11).Jest to również opisane na stronie podręcznika, chociaż nie jest to strasznie jasne i łatwe do zrozumienia:
źródło
*/5
? Czy byłoby to 1,6,11,1,6 ... czy byłoby 1,6,11,4,9 ...? Założyłem, że „powyżej dozwolonego zakresu wartości” oznacza, że nie ma pamięci, ale teraz nie byłem tego taki pewien.crond
po prostu bierze listę możliwych wartości, stosuje selektor kroków jeden raz, a następnie używa tych wyników wielokrotnie.Dzisiaj jest pierwszy dzień listopada.
* / 2 oznacza, że twoja praca z cronjob będzie wykonywana co drugi miesiąc, jak mówisz.
Tak więc w przyszłym miesiącu (grudniu) cronjob nie zostanie wykonany, ale nastąpi miesiąc (styczeń) po nim.
Miesiąc przed tym miesiącem (październik) cronjob nie został wykonany. Ale we wrześniu tak było.
źródło
*/2
pole miesiąca odpowiada1-11/2
, a nie2-12/2
. Nie twierdzę, że się mylisz, ale czy możesz przedstawić dokumentację potwierdzającą?