25 dakikada bir CronJob


13

Her 25 dakikada bir iş yapmanın daha kolay bir yolu olup olmadığını bilmek istiyorum. Cronjob'da, dakika parametresini * / 25 olarak belirtirseniz, her saatin yalnızca 25. ve 50. dakikalarında çalışır

Yanıtlar:


15

Crontab'daki komut ile yürütülür, /bin/shböylece geçerli dakika modulo 25'in sıfıra eşit olup olmadığını hesaplamak için aritmetik genişletmeyi kullanabilirsiniz:

*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command

cronbu girişin tamamını her 5 dakikada bir çalıştıracak, ancak yalnızca geçerli dakika (çağdan bu yana dakika olarak) modulo 25 sıfıra eşit olacaksa çalışır your_command.

Diğerleri işaret gibi bu neden olmaz, böylece 1 gün, 25 dakika ile kalansız your_commandher gün aynı anda çalışmasına, ancak olacak her 25 dakikada çalıştırın.


sadece güler yüzlü ...
Tomas

ISC'den cron uygulaması ile en azından bu% karakterlerden ters eğik çizgi ile kaçmanız gerektiğini unutmayın.
Stéphane Chazelas

@ StéphaneChazelas, iyi bir nokta. Devam ettim ve yüzde işaretlerinden önce ters eğik çizgiler ekledim, çünkü bildiklerime göre her cron uygulaması bunu gerektiriyor.
CODE-REaD

7

En iyi bahsiniz 20 dakika veya 30 dakika koşmaktır.

Bir sonraki en iyisi her 5 dakikada bir tetiklemek ve daha sonra dahili bir sayımı veya zaman damgasını tutmak ve her 5. tetikleyiciyi çalıştırmak veya son çalıştırmadan bu yana 25 dakika geçmesi olabilir.

Daha karmaşık olanı, gece yarısından başlayarak bir gün için doğru zamanları çalışmak ve günün sonunda hatayı kabul etmek olacaktır. Bu, crontab girişinin farklı saatlere kopyalanmasını içerecektir.

Bundan daha karmaşık bir ay boyunca, farklı kombinasyonları kapsayacak şekilde crontab girişinin birçok kopyasını içerecek olan zamanları çalışmak olacaktır.

Sonunda her zaman arka plan programında kendi uygulamanızı uygulayabilir ve planlamayı yapabilirsiniz.


6

Onunla doğrudan bir deneyimim yok, ama fcron kutudan istediğini yapıyor gibi görünüyor. Belgelerine göre frekansları belirleyebilirsiniz:

# 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

Burada 25 dakikayı nerede görüyorsun?
Philomath

Fcron kullanarak ve @ 25 commandhile yapmalısınız.
Caleb

Teşekkürler Caleb. Bir tanesini doğrudan dokümantasyondan kaldırmak yerine özel bir örnek oluşturmalıydım.
che2cbs

2

Kısaca burada sorunun ne olduğunu açıklayayım. Dakika alanına 25 girilmesi cron, geçerli saatin dakika sayısı 25 olduğunda, yani saatte bir çalıştırılmasına neden olur . Bir eşleşme listesi girebilirsiniz, sorun şu ki, 60 (saatin dakikası) 25'e bölünemez, bu nedenle saate göre birkaç giriş eklemeniz gerekir. 60 ve 25'in en az ortak katı 300, yani 5 * 60'tır. Örneğin:

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...

Ama yine burada, 24 (günde saat) 5'e bölünemez, 5 & 24'ün en az ortak katı sadece 5 * 24 = 120'dir.


Belki de cevap asıl soruya bir yorum olmalıydı.
Philomath

1

Bir dosyanın son değişiklik zamanı ile oynatabilirsiniz

  • /usr/local/bin/ageBir dosyanın yaşını çıkaracak küçük bir komut dosyası (örneğin ) oluşturun:

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

Crontab'ınız şöyle görünür (eğer haklıysam 25 dakika 1500 saniyeye eşittir)

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

Ben kullandıkları Not /var/tmpyerine /tmpgöre çünkü FHS sistem kapatma / başlangıçta silinmiş olması gerekiyordu değildir.


-2

Aşağıdaki 0 ​​0/25 * * * çalışması gerektiğini düşünüyorum?


Bildiğim kadarıyla her dakika çalışacak.

Bu saatte bir ... 25 saatte bir iţleyecek mi? 0/25 ... bunun ne yaptığını bile bilmiyorum ama OP'nin peşinde olduğu şey bu değil.
Caleb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.