ben. e olacak xtend Keith Thompson yanıtı:
Onun çözümü her 5 dakikada bir mükemmel çalışır, ancak her 13 dakikada bir işe yaramaz;
5:13
5:26
5:30
5:52
6:00 because 0%13 is 0
6:13
...
Ben sorunu fark eminim: Biz $minutes % 13
kullanırsanız bu zamanlamayı olsun.
#!/bin/bash
minutesSinceEpoch=$(($(date +'%s/60')))
if [[ $(($minutesSinceEpoch % 13)) -eq 0 ]]; then
php [...]
fi
date(1)
döner geçerli tarih, biz Epoch'tan beri saniye cinsinden biçimlendirmek (%s
) ve sonra biz temel matematik yapmak: Biz Epoch beri dakika (saat, gün veya hafta) sayarsan Herhangi frekansını elde edebilirsiniz :
# .---------------------- bash command substitution
# |.--------------------- bash arithmetic expansion
# || .------------------- bash command substitution
# || | .---------------- date command
# || | | .------------ FORMAT argument
# || | | | .----- formula to calculate minutes/hours/days/etc is included into the format string passed to date command
# || | | | |
# ** * * * *
$(($(date +'%s/60')))
# * * ---------------
# | | |
# | | ·----------- date should result in something like "1438390397/60"
# | ·-------------------- it gets evaluated as an expression. (the maths)
# ·---------------------- and we can store it
ve OpenShift üzerinde saatlik, günlük veya aylık cron işleri ile bu yaklaşımı kullanabilirsiniz:
#!/bin/bash
# We can get the
minutes=$(($(date +'%s/60')))
hours=$(($(date +'%s/60/60')))
days=$(($(date +'%s/60/60/24')))
weeks=$(($(date +'%s/60/60/24/7')))
# or even
moons=$(($(date +'%s/60/60/24/656')))
# passed since Epoch and define a frequency
# let's say, every 7 hours
if [[ $(($hours % 7)) -ne 0 ]]; then
exit 0
fi
# and your actual script starts here
noti -ne
(eşit olmayan) operatörünü betikten IF konstrüksiyonuna sarmak için -eq
(eşit) operatörünü kullanmak yerine betikten çıkmak için kullandım; Kullanışlı buluyorum.
Ve sıklık için uygun .openshift/cron/{minutely,hourly,daily,weekly,monthly}/
klasörünü kullanmayı unutmayın.
yukarıdaki cevap yanlış ve dakika 50-59 den her dakika yürütür. Yani değişiklik, "eğer [$ (($ dakika% 5)) -eq 0] ise" ve "işe yarıyor. Nedense benim düzenlemem reddedildi. Yani, sadece doğru cevabı yorumda bırakacağım. Yazar veya birisi bu ifadeyle cevabı düzenlemekte özgürdür. – theshadowmonkey
@theshadowmonkey: Bitti. Bunu yakaladığın için teşekkürler. Çeşitli alternatifler ekledim (bunlar aşırıya kaçabilir). –
@theshadowmonkey kullanırken [$ (($ dakika% 5)) -eq 0]; sonra hata alıyorum: 08: taban için çok büyük değer (hata belirteci "08") –