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 * * * * ?


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ę.


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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.