Uruchom zadanie Cron co N minut plus offset

251

*/20 * * * *

Zapewnia, że ​​uruchamia się co 20 minut. Chciałbym uruchamiać zadanie co 20 minut, zaczynając od 5 po godzinie, czy jest to możliwe w przypadku Crona? Czy może być:

5/20 * * * * ?

AJP
źródło
10
Dzięki Babilończykom, którzy zdecydowali, że nasz system czasu powinien być dokładnie podzielony przez 1,2,3,4,5 i 6.
arivero
3
jeśli jest podzielna przez 2 i 3, jest również podzielna przez 6
Ziofil

Odpowiedzi:

514

Aby uruchomić zadanie co 20 minut, zaczynając o 5 po godzinie, spróbuj wykonać następujące czynności:

 5-59/20 * * * *

Wyjaśnienie

*W dziedzinie minut jest taki sam, jak 0-59/1w którym 0-59jest zakres i 1jest krok . Polecenie będzie uruchamiane od pierwszej minuty w zakresie (0), a następnie we wszystkich kolejnych minutach, które są odległe od pierwszego krok po kroku (1), aż do ostatniej (59).

Dlatego */20 * * * *będzie działał o 0 minutach, 20 minutach później i 40 minutach później - czyli tak samo jak co 20 minut. Jednak */25 * * * *będzie działać o 0 minutach, 25 minutach później i 50 minutach później - co nie jest takie samo jak co 25 minut. Dlatego zwykle pożądane jest użycie wartości kroku w polu minuty, która dzieli się równomiernie na 60.

Aby więc przesunąć czas rozpoczęcia, jawnie określ zakres i ustaw pierwszą wartość na wartość przesunięcia.

Przykłady

5-59/20 * * * * będzie działać po 5 minutach, 25 minutach później i 45 minutach później.

10-59/25 * * * * będzie działać po 10 minutach i po 35 minutach.

1-59/2 * * * * będzie działać co nieparzystą minutę.

toksalot
źródło
3
to działa idealnie. Jak się tego dowiedziałeś? Czy możesz wskazać mi dokumenty? Dzięki.
AJP,
12
Szereg wyszukiwań Google doprowadziło mnie do odpowiedzi na błąd serwera . Miał błąd, który naprawdę mnie zdezorientował, zwłaszcza że inne wyniki sugerowały, że krok modułu minut powinien wynosić zero . W końcu znalazłem tę stronę podręcznika, która dała mi odpowiedź. W rezultacie mogłem skomentować odpowiedź na błąd serwera, która została już naprawiona. Nie pamiętam rzeczywistych wyszukiwanych haseł, których użyłem do znalezienia strony IBM.
toxalot
3
Dzięki i bardzo dobrej pracy @toxalot. Żałuję, że nie mogliśmy przyznać odznaki „Niestrudzony Śledczy”! : P
AJP
5
LOL. Musiałem uruchamiać zadanie co 10 minut (przesunięte o 5) i naprawdę nie chciałem używać listy rozdzielanej przecinkami, więc postanowiłem znaleźć odpowiedź.
toxalot
2
CPanel nie wydaje się niestety tak :(
Robert Went
53

Pewnie!

5,25,45 * * * * /your/cron
fedorqui „SO przestań szkodzić”
źródło
2
Dzięki. Skończyło się na tym, mając nadzieję, że może być bardziej eleganckie rozwiązanie.
AJP
13
Czasami proste rozwiązanie jest lepsze, ponieważ jest łatwe do odczytania i zrozumienia. Lubię wiedzieć, że 5-59/20to możliwe, ale 5,25,45ma tę zaletę, że od razu bardzo jasne, co to robi.
thomasrutter
2
tylko jeśli twój krok jest wystarczająco duży
Tebe
3
To jest o wiele lepszy przykład. Zrozumienie momentu rozpoczęcia pracy wymaga 0 obciążenia poznawczego.
Dylan Pierce
11

Możesz spróbować: */5 * * * * sleep N; your job

Leo Chu
źródło
4
Nie widzę w tym nic złego - w rzeczywistości jest to bardzo podobne do tego, jak zadanie cron certbota osiąga losowe przesunięcie, które pomaga utrzymać równowagę obciążenia serwera. na pewno nie zasługuje na te wszystkie negatywne opinie
billynoah
6
To sprawiło, że zastanawiałem się, jak spać losową liczbę sekund. sleep `shuf -i 1-100 -n 1`Zrób sztuczkę.
Laizer
cholera, @Laizer, kazałeś mi się czegoś nauczyć! (dziękuję!)
UncaAlby