Czy możliwe jest przesunięcie zestawu skryptów cron do uruchamiania co 5 minut?
Mam dwa skrypty, skrypt 1 zbiera dane z jednej bazy danych i wstawia je do innej, skrypt 2 wyciąga te dane i wiele innych danych i tworzy z nich ładne raporty. Oba skrypty muszą być uruchamiane co 5 minut. Chcę przesunąć skrypt 2 o jedną minutę, aby mógł utworzyć raport z nowych danych. EG Chcę, aby skrypt pierwszy działał, :00, :05, :10, :15 [...]
a skrypt drugi działał :01, :06, :11, :16 [...]
co godzinę. Skrypty nie są od siebie zależne, a skrypt 2 musi zostać uruchomiony niezależnie od tego, czy skrypt się powiódł, czy nie. Przydałoby się jednak, aby raporty zawierały najnowsze dane. Czy to możliwe z cronem?
Słupek;
Pomyślałem o użyciu obu poleceń w skrypcie powłoki, aby działały natychmiast po sobie, ale to nie zadziałałoby, czasami skrypt 1 może się zawiesić na oczekiwaniu na zewnętrzne interfejsy API itp., Więc uruchomienie może potrwać do 15 minut, ale skrypt 2 musi być uruchamiany co 5 minut, więc zrobienie tego w ten sposób zatrzymałoby / opóźniłoby wykonanie skryptu 2. Gdybym mógł ustawić to w Cron, oznaczałoby to, że skrypt 2 działałby niezależnie od tego, co robił skrypt 1
Minutowe pole wprowadzania crontab akceptuje „przyrosty” operatora, co jest nieco mylące, ponieważ wygląda na to, że powinien być matematycznym operatorem „dzielenia przez”, ale nie jest. Najczęściej zobaczysz, że użył czegoś takiego jak poniżej. Zauważ, że nie znajduje to liczb, które można podzielić przez pięć, ale bierze co piąty element z zestawu:
To mówi cronowi, aby pasował co piąty element (
/5
) z zestawu minut 0-59 (*
), ale możesz zmienić ten zestaw w następujący sposób:Zajmie to co piąty element z zestawu 1-59, uruchamiając polecenie w minutach 6, 11, 16 itd.
Jeśli potrzebujesz więcej drobnoziarnistych odsunięć niż jedna minuta, możesz zhakować go za pomocą polecenia uśpienia jako części swojego crontab w następujący sposób:
Spowodowałoby to uruchomienie zadania co pięć minut, ale tak naprawdę polecenie nie uruchomiło się po 15 sekundach od minuty. W przypadku krótkich zadań, w których kilka sekund po czymś innym robi różnicę, ale nie chcesz spóźnić się o minutę, jest to dość prosty hack.
źródło
Możesz wskazać przesunięcie czasowe za pomocą symbolu +. Na przykład, aby uruchomić w
:01, :06, :11, :16 [...]
, utwórz zadanie takie jakźródło
To działało dla mnie:
Gdzie 1 to przesunięte minuty. Więc jeśli chcesz przesunąć trzy minuty:
Mam to działa w ustawieniach harmonogramu AWS
źródło