CronJob co 25 minut


13

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

Odpowiedzi:


15

Polecenie w crontab jest wykonywane za pomocą, /bin/shdzię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

cronuruchomi 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_commandto uruchomienia o tej samej porze każdego dnia, ale będzie on działał co 25 minut.


po prostu genialne ...
Tomas

Zauważ, że dzięki implementacji cron z ISC przynajmniej będziesz musiał uciec od tych% znaków odwrotnym ukośnikiem.
Stéphane Chazelas,

@ StéphaneChazelas, dobry punkt. Poszedłem dalej i dodałem odwrotne ukośniki przed znakami procentowymi, ponieważ o ile mi wiadomo, każda implementacja crona tego wymaga.
CODE-REaD

7

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.


6

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:

# Get our mails every 30 minutes 
@ 30 getmails -all 

# make some security tests every 48 hours of system up time, 
# force a mail to be sent to root even if there is no output 
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh

Gdzie widzisz tutaj 25 minut?
Philomath

Korzystanie z fcron i @ 25 commandpowinno załatwić sprawę.
Caleb

Dzięki Caleb. Powinienem był stworzyć przykład dostosowany do potrzeb, zamiast wyciągać jeden z dokumentacji.
che2cbs

2

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


Może odpowiedzią powinien być komentarz do pierwotnego pytania.
Philomath

1

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:

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

Twój crontab wyglądałby tak (zakładając, że 25 minut to 1500 sekund, jeśli mam rację)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

Zauważ, że używam /var/tmpzamiast, /tmpponieważ zgodnie z FHS nie powinien być usuwany podczas zamykania / uruchamiania systemu.


-2

Myślę, że następujące powinny działać 0 0/25 * * *?


Zgodnie z moją wiedzą będzie działać na każdą minutę.

Byłoby to wykonywane raz na godzinę ... 25 godzin? 0/25 ... nawet nie jestem pewien, co to robi, ale nie o to chodzi w OP.
Caleb
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.