2017-12-18 412 views
1

我需要一個cron跳過每個月的第一個星期六。我知道我們可以使用以下命令在特定日期運行,但是有沒有辦法在每個月的特定日期跳過?Schedule Cron跳過每個月的第一個星期六

//每個月

0 2 * * 1 [ date '+\%m' == date '+\%m' -d "1 week ago" ] || /path/to/command 

回答

0

由於似乎在cron別無選擇。 我正在用腳本來滿足上述需求。

**if [ $(date +%d) -le 7 ] && [ $(date +%u) -eq 1 ] ;** 

[ $(date +%d) -le 7 ] - 如果檢查的日子落在第7天一個月

[ $(date +%u) -eq 6 ] - 檢查日期等於到週六

感謝。

0

對第一個星期一運行是您的命令二進制文件或只是腳本? 怎麼樣的想法加在一開始類似的東西:

[ $(date | awk '{print $1}') == "Sat" ] && exit 1 || { \ 
# your code here 
... 
} 
0

在cron下工作(不要忘記躲避%):

0 2 * * * [[ `date '+\%u'` -ne '6' && `date '+\%d'` -lt '8' ]] || [[ `date '+\%d'` -gt '7' ]] && /path/to/command 

的邏輯是:

  • 如果當天不是週六和每月的天是1-7,執行命令
  • 如果上面不正確,檢查月份的日比7大,如果是執行

另一種方式是反轉的邏輯:

0 2 * * * [[ ! (`date '+\%u'` -eq '6' && `date '+\%d'` -lt '8') ]] && /path/to/command 

的邏輯是:

  • 如果天不是第一個星期六,執行命令

man 5 crontab

「第六」f ield(該行的其餘部分)指定要運行的命令。該行的整個命令部分,直到換行或 爲「%」字符,將由/ bin/sh或由cronfile的SHELL變量中指定的shell執行。除非以反斜槓(\)轉義,否則命令中的「%」字符將被更改爲換行符,並且第一個%後的所有數據將作爲標準輸入發送到該命令。

+0

22 07 * * ['date'+%u'' -ne'2'&&'date'+%d''-lt 17] || ['date'+%d''-gt 17] &&/ /script.sh。 編輯上述命令以立即觸發腳本並進行測試。但它不起作用。我做錯了什麼? 如果我沒有錯,它必須運行腳本。 –

+0

投擲下面的錯誤。 /bin/sh:-c:line 0:尋找匹配的''' –

+0

時意外EOF你需要轉義%(因爲某些原因我需要double [[]]: '[['\'date' + \%u'\'-ne'2'&&''date'+ \%d'\'-lt 17]] || [[\'date'+ \%d'\'-gt 17]] && echo foo>〜/ foo.txt 2>〜/ foo.err' – kvantour

相關問題