cron syntaxで動的タスクスケジューラを作成しようとしています。cronは "day"フィールドをどのように扱いますか?
cronは、その月の日数をオーバーフローする日をどのように処理しますか?たとえば、29日後の2月です。 cronは日式31
または*/2
をどのように処理しますか?
*/2
を1,3,5..29,31
に展開すると、31が削除されていることがわかりました。しかし、その日がちょうど31
であれば、うまくいきません。何か案が?
cron syntaxで動的タスクスケジューラを作成しようとしています。cronは "day"フィールドをどのように扱いますか?
cronは、その月の日数をオーバーフローする日をどのように処理しますか?たとえば、29日後の2月です。 cronは日式31
または*/2
をどのように処理しますか?
*/2
を1,3,5..29,31
に展開すると、31が削除されていることがわかりました。しかし、その日がちょうど31
であれば、うまくいきません。何か案が?
cronは、一致しないと無視します。マニュアルページが書かれている方法では、月の日が一致するか曜日が一致するかは一致します。いくつかの実装(例えばcronie)はDoMの*/2を1,3,5,7 ..、31と評価するだけなので、2月には31を無視しなければなりません。
単純な一致が使用されるため、無視されます。あなたはたぶん「これを毎月最後の日に実行する」ことを達成しようとしています。
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
'* * 31 * *'は7ヶ月/年しか実行できませんでしたか? – Znarkus
はい、31日間の月のみです。 –
だから、 '* * 31 * *'この(それhereた)動作するはずのような何か年間7か月しか稼動しないでしょうか? – Znarkus