Jak cron radzi sobie z resztkami w „co tak często” zadaniach

13

Jeśli to zrobię:

*/9 * * * * /path/to/wotnot

O której godzinie zadanie będzie działać za dwie godziny, poczynając od godziny 09:00

To jest:

09h00
09h09
09h18
09h27
09h36
09h45
09h54
10h03
10h12
10h21
10h30
10h39
10h48
10h57

lub B:

09h00
09h09
09h18
09h27
09h36
09h45
09h54
10h00
10h09
10h18
10h27
10h36
10h45
10h54
Jesse
źródło

Odpowiedzi:

31

Patrząc na zakres, interpretujesz go tylko w tej kolumnie, więc „* / 9” w kolumnie minut oznacza „lista co minutę, a następnie wybierz co dziewiątą wartość”. Ten wybór resetuje się w górnej części godziny, więc restartujesz o godzinie xx: 00, xx: 09, xx: 18 itd. Co godzinę.

Można go również odczytać jako „co dziewięć minut każdej godziny”, co oznacza reset na początku godziny.

Rzeczywiste zachowanie, które zobaczysz, odpowiada opcji B.

Jan
źródło
To jedyna odpowiedź, która wydaje się odpowiadać na pytanie. Próbowałeś tego, aby się upewnić?
rodzic
W ciągu ostatnich 10 minut? Nie. W ciągu ostatnich trzech miesięcy? Tak, choć nie w odstępie dziewięciu minut.
John
Nie rozumiem, dlaczego miałbym się przejmować, kiedy to zrobiłeś, ale tylko jeśli. Dziękuję Ci.
rodzic
1
Byłem wkurzony przez byłych współpracowników z powodu „nie, nie przetestowałeś tego, polegasz na swojej wadliwej pamięci!” w podobnych sytuacjach (oczywiście 5 minut później odchodzą zirytowani po tym, jak udowodnię, że to nadal działa), więc nawykłem się wcześniej.
John
2
Pierwszym krokiem w testowaniu jest upewnienie się, że masz tę samą markę i wersję co klient (w tym przypadku Jesse). Jak dotąd nie widzę tu żadnych wskazówek na temat tego, jakiego używa cron. (Prawdopodobnie jest to Vixie Cron, a ta podstawowa funkcja jest prawdopodobnie stabilna w różnych wersjach tego programu.)
Kaz
22

Aby potwierdzić odpowiedź Johna, */nkolumna minut oznacza „kiedy minuta wynosi 0 mod n”. Oto crontabwpis:

*/7 * * * *  date >> /tmp/foo

a oto wynik:

Thu Jan 10 14:49:01 GMT 2013
Thu Jan 10 14:56:01 GMT 2013
Thu Jan 10 15:07:01 GMT 2013

Zwróć uwagę, że przerwa między dwoma ostatnimi czasami nie wynosi siedmiu minut, ponieważ po nn: 56 następnym razem */7mecze to `nn + 1: 07.

Tak, wiem, że te czasy są w przyszłości (lub były, kiedy to opublikowałem); Musiałem szybko przyspieszyć zegar systemowy, aby uzyskać szybką odpowiedź.

Szalony Kapelusznik
źródło
5
+1 za wysiłek :)
Sven