2012-02-06 12 views
0

cron syntaxで動的タスクスケジューラを作成しようとしています。cronは "day"フィールドをどのように扱いますか?

cronは、その月の日数をオーバーフローする日をどのように処理しますか?たとえば、29日後の2月です。 cronは日式31または*/2をどのように処理しますか?

*/21,3,5..29,31に展開すると、31が削除されていることがわかりました。しかし、その日がちょうど31であれば、うまくいきません。何か案が?

答えて

0

cronは、一致しないと無視します。マニュアルページが書かれている方法では、月の日が一致するか曜日が一致するかは一致します。いくつかの実装(例えばcronie)はDoMの*/2を1,3,5,7 ..、31と評価するだけなので、2月には31を無視しなければなりません。

+0

だから、 '* * 31 * *'この(それhereた)動作するはずのような何か年間7か月しか稼動しないでしょうか? – Znarkus

1

単純な一致が使用されるため、無視されます。あなたはたぶん「これを毎月最後の日に実行する」ことを達成しようとしています。

59 23 * * * [ `date -d tomorrow +%d` -eq '01' ] && <your script> 

か、そのcronを毎日実行するようにしますが、それはこの.SHスクリプトを実行してみましょう:

TODAY=`date +%d` 
TOMORROW=`date +%d -d "1 day"` 

# If tomorrow date is less than today, we are at the end of the month 
if [ $TOMORROW -lt $TODAY ]; then 
    # This is the last day of the month, so you can do your stuff here...run other script... 
fi 
+0

'* * 31 * *'は7ヶ月/年しか実行できませんでしたか? – Znarkus

+0

はい、31日間の月のみです。 –

関連する問題