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

Pappu
źródło

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.

camh
źródło
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.

Douglas Leeder
źródło
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
che2cbs
źródło
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 ...

Philomath
źródło
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.

SamK
źródło
-2

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


źródło
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