基本上,我有一系列命令我想運行其他星期日。我設置了一個cron任務來在每個星期日運行這個腳本,然後這個腳本只允許腳本運行幾周,因此它只能在其他星期日運行。我的問題是,這個劇本會不會每年都在進行。這段代碼會在新的一年中工作嗎?
if [ $(($(date +'%U') % 2)) -eq 0 ]
then
some command
fi
基本上,我有一系列命令我想運行其他星期日。我設置了一個cron任務來在每個星期日運行這個腳本,然後這個腳本只允許腳本運行幾周,因此它只能在其他星期日運行。我的問題是,這個劇本會不會每年都在進行。這段代碼會在新的一年中工作嗎?
if [ $(($(date +'%U') % 2)) -eq 0 ]
then
some command
fi
您在這裏有所謂的the XY problem。
您的shell腳本的這一部分有問題,並且您想通過修復腳本來解決問題。事實上,解決問題的根本原因更容易。
簡單地改變你的cron作業運行每其他星期日:
#----+-----+-----+-----+-----+-------------------------------------------------
#min |hour |day |month|day |command
# | |of mn| |of wk|
#----+-----+-----+-----+-----+-------------------------------------------------
03 04 * * 7 expr `date +%W` % 2 >/dev/null || fortnightly.sh
更多信息,請參見How to instruct cron to execute a job every second week?。
如果您不想使用cron
語法指定此語法,則可以使用%s
格式而不是%U
。這會給你自1970年1月1日UTC以來的秒數。你可以把它分成一個星期的數字:
$(($(date +'%s')/604800))
然後,你可以做你的模測試。
注意編號604800 = 7 * 86400 = 7 * 24 * 60 * 60
即一週內的秒數。
如果你每天都在運行,你會想知道它實際上是一個星期天。所以在這種情況下,你會除以86400來獲得一個天數。然後,知道第零天是星期四,您可以檢查結果(模14)是3還是10,具體取決於您開始的哪個星期日。
您是否嘗試過測試它?你知道你可以改變計算機上的時鐘來模擬這個。 – JohnFx 2013-05-02 02:36:05
您不必更改時鐘。你可以使用'-d'指定一個日期。 – paddy 2013-05-02 02:38:55
您可以直接在cron中寫上「隔兩週」。看[這裏有幾種方法](http://stackoverflow.com/questions/350047/how-to-instruct-cron-to-execute-a-job-every-second-week) – 2013-05-02 02:45:46