我。將e xtend Keith Thompson回答:
他的解決方案每隔5分鐘完美工作一次,但不會工作,比如說,每13分鐘一次;如果我們使用$minutes % 13
我們得到這個時間表:
5:13
5:26
5:30
5:52
6:00 because 0%13 is 0
6:13
...
我相信你會注意到這個問題。我們可以實現任意頻率,如果再算上分鐘(,小時,天或數週),因爲Epoch:
#!/bin/bash
minutesSinceEpoch=$(($(date +'%s/60')))
if [[ $(($minutesSinceEpoch % 13)) -eq 0 ]]; then
php [...]
fi
date(1)
返回當前的日期,我們因爲大紀元格式設置爲秒(%s
),然後我們做基本的數學:
# .---------------------- 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
而且你可以使用在OpenShift與每小時,每天或每月cron作業這種方法:
#!/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
(不等於)運算符來退出腳本,而不是使用-eq
(等於)運算符將腳本包裝到IF構造中;我發現它很方便。
並記住爲您的頻率使用正確的.openshift/cron/{minutely,hourly,daily,weekly,monthly}/
文件夾。
以上的答案是錯誤的,從執行50-59分鐘,每分鐘。所以這個改變會改變條件爲「if [$(($ minute%5))-eq 0]; then」並且它有效。由於某種原因,我的編輯被拒絕了。所以,我只是在評論中留下正確的答案。作者或其他人隨時可以用本聲明編輯答案。 – theshadowmonkey
@theshadowmonkey:完成。感謝您的支持。我已經包括了幾個選擇(這可能是矯枉過正)。 –
@theshadowmonkey使用if [$(($ minute%5))-eq 0];那麼我得到的錯誤:08:價值太大基地(錯誤標記是「08」) –