📔
crontabチートシート
基本編
記法
分 時 日 月 曜日 コマンド
* * * * * command
毎時i分
i * * * * command
毎日H時0分
0 H * * * command
毎月d日0時0分
0 0 d * * command
毎年M月1日0時0分
0 0 1 M * command
毎週D曜日0時0分
D | 0, 7 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
曜日 | 日 | 月 | 火 | 水 | 木 | 金 | 土 |
0 0 * * D command
複数回
5分と15分と45分
複数条件は,(カンマ)で区切る
5,15,45 * * * * command
15分毎
この場合0,15,30,45分に実行
*/15 * * * * command
範囲指定
0~10分の範囲で毎分実行
0-10 * * * * command
範囲指定と繰り返し
30~45分の間で5分おきに繰り返し
30-45/5 * * * * command
応用編
曜日と日付の同時指定
13日の金曜日0時0分
こうしたいところですが、、
0 0 13 * 5 command
これだと13日もしくは金曜日の0時0分という意味になってしまいます。
正解は
0 0 13 * * /usr/bin/test $(date +\%w) -eq 5 && command
日付指定だけしてあげて、あとはシェルで曜日判定をします。逆にcronで曜日を指定してあげて、シェルで日付の判定をしても大丈夫です。本記事でシェルスクリプトに関しては詳しく触れません。
月末
月によって月末の日付が異なるのが厄介です。
0 0 28-31 * * /usr/bin/test $(date -d '+1 day' +\%d) -eq 1 && command
最終D曜日
もう一度貼っておきます。
D | 0, 7 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
曜日 | 日 | 月 | 火 | 水 | 木 | 金 | 土 |
その月の最終曜日の1週間後(7日後)は月が変わっているはず。
0 0 * * D /usr/bin/test $(date '+\%m') -ne $(date -d '+7 day' '+\%m') && command
第N週目のD曜日
範囲指定とシェルスクリプトによる曜日判定を組み合わせます。
N | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
Range | 1-7 | 8-14 | 15-21 | 22-28 | 29-31 |
0 0 Range * * /usr/bin/test $(date +\%w) -eq D && command
あとがき
自分もよく忘れるので知識の定着と自分用のチートシート作成がてら記事にしました。ただ、特に覚える必要はないと思います。一回書いたら終わりなので、、、
Discussion