Yanıtlar:
Crontab'daki komut ile yürütülür, /bin/sh
bö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
cron
bu 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_command
her gün aynı anda çalışmasına, ancak olacak her 25 dakikada çalıştırın.
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.
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
@ 25 command
hile yapmalısınız.
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.
Bir dosyanın son değişiklik zamanı ile oynatabilirsiniz
/usr/local/bin/age
Bir 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/tmp
yerine /tmp
göre çünkü FHS sistem kapatma / başlangıçta silinmiş olması gerekiyordu değildir.
Aşağıdaki 0 0/25 * * * çalışması gerektiğini düşünüyorum?