select to_char(add_months(last_day(sysdate) +1, -1), 'yyyymmdd'),to_char(last_day(sysdate)+1 , 'yyyymmdd') from dual ;
00 22 * * * [`echo \`cal\`|awk '{print $NF}'` -eq `date +\%d`] && do-something(每月月底做兩個.sh檔案,以防其中一個不執行成功時,另個起作用)
假設每月最後一天的8點10分執行your_cmd_fullname,則
[code]for ((i=1;i<=12;i++));do cal $i 2004|sed '/^$\|2004\|^Su.*/d'|sed -e :a -e 'N;s/\n/ /;ta'|sed 's/.* \([0-9][0-9]\)$/\1/';done|awk '{a[$0]=sprintf("%s,%s",a[$0],NR)}END{for(i in a)printf("10 8 %d %s * your_cmd_fullname\n",i,a[i])}' days|sed 's/ ,/ /'[/code]
執行結果
[code]10 8 29 2 * your_cmd_fullname
10 8 30 4,6,9,11 * your_cmd_fullname
10 8 31 1,3,5,7,8,10,12 * your_cmd_fullname[/code]
然後加入此段代碼到你的crontab中
Linux---Shell:
#!/bin/bash
today=`date +%d`
last_day=`cal | xargs | awk '{print $NF}'`
if [ "$today" != "$last_day" ]; then
exit 1
fi
.... # other codes start from here
如何在crontab中表達每月的最後一天,用運算式不行
每天執行,在要執行的程式頭做判斷,不是月末則退出