Chcę wiedzieć, czy istnieje łatwiejszy sposób na uruchomienie zadania co 25 minut. W cronjob, jeśli określisz parametr minute jako * / 25, będzie on działać tylko 25 i 50 minuty każdej godziny
13
Polecenie w crontab jest wykonywane za pomocą, /bin/sh
dzięki czemu można użyć rozszerzenia arytmetycznego, aby obliczyć, czy bieżąca minuta modulo 25 jest równa zeru:
*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command
cron
uruchomi ten cały wpis co 5 minut, ale tylko jeśli bieżąca minuta (w minutach od epoki) moduł 25 równa się zeru, uruchomi się your_command
.
Jak zauważyli inni, 1 dzień nie jest równomiernie podzielny przez 25 minut, więc nie spowoduje your_command
to uruchomienia o tej samej porze każdego dnia, ale będzie on działał co 25 minut.
Najlepszym rozwiązaniem jest uruchomienie w 20 lub 30 minut.
Następnym najlepszym rozwiązaniem może być wyzwalanie co 5 minut, a następnie zachowanie wewnętrznego licznika lub znacznika czasu i uruchamianie co 5 wyzwalaczy lub jeśli upłynęło 25 minut od ostatniego uruchomienia.
Bardziej skomplikowane byłoby ustalenie prawidłowych czasów dla danego dnia, zaczynając od północy, i zaakceptowanie błędu na koniec dnia. Oznaczałoby to powielenie wpisu crontab dla różnych godzin.
Bardziej skomplikowane byłoby wyliczenie czasów na cały miesiąc, co wymagałoby wielu kopii wpisu crontab obejmującego różne kombinacje.
Wreszcie możesz zaimplementować swój własny zawsze na demonie i zlecić to planowaniu.
źródło
Nie mam z tym bezpośredniego doświadczenia, ale wydaje się , że fcron robi to, co chcesz od razu po wyjęciu z pudełka. Zgodnie z jego dokumentacją możesz określić częstotliwości:
źródło
@ 25 command
powinno załatwić sprawę.Pozwól, że wyjaśnię krótko, na czym polega problem. Wpisanie 25 w polu minut powoduje
cron
, że minuty bieżącego czasu wynoszą 25, czyli raz na godzinę. Możesz wprowadzić listę dopasowań, problem polega na tym, że 60 (minut na godzinę) nie można podzielić przez 25, więc musisz dodać kilka wpisów na podstawie godziny. Najmniejszą wielokrotnością 60 i 25 jest 300, czyli 5 * 60. więc będziesz musiał jechać przez 5 godzin, aż wrócisz do pierwotnego początku. na przykład:0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...
Ale tutaj znowu 24 (godzin dziennie) nie da się podzielić przez 5, najmniejszą wielokrotnością 5 i 24 jest po prostu 5 * 24 = 120. i tak dalej ...
źródło
Możesz grać z czasem ostatniej modyfikacji pliku
Utwórz mały skrypt (na przykład
/usr/local/bin/age
), który wyświetli wiek pliku:Twój crontab wyglądałby tak (zakładając, że 25 minut to 1500 sekund, jeśli mam rację)
Zauważ, że używam
/var/tmp
zamiast,/tmp
ponieważ zgodnie z FHS nie powinien być usuwany podczas zamykania / uruchamiania systemu.źródło
Myślę, że następujące powinny działać 0 0/25 * * *?
źródło