この記事の目的
ここに書かれていることは、私のオリジナリティな部分は全くありません。
普段crontabを設定しようとして、「あれ?どう書くんだっけ?」と、ど忘れしがちなので自分のよく使う設定内容・方法についてまとめておきます。
設定確認方法
・自分自身(ログイン中のユーザ)の設定確認
crontab -l
・任意のユーザの設定確認(権限がある場合に限る)
crontab -l -u ユーザ名
・当該サーバにcrontabを設定しているユーザ一覧(rootユーザのみ実行可能)
ls -l /var/spool/cron
ここで表示されたファイル名(=ユーザ名)をcatしても、crontabの設定内容が確認できる
設定編集方法
crontab -e
crontabの書き方
・基本書式
分 時 日 月 曜日 コマンド
| 項目 | 内容 | 備考 |
|---|---|---|
| 分 | 0~59 | |
| 時 | 0~23 | |
| 日 | 1~31 | 30 と指定したら2月は実行されない |
| 月 | 1~12 | |
| 曜日 | 0~7[0と7は日曜日] | |
| コマンド | 実行したいコマンド |
具体的な書き方の例
よく使われる書き方
* * * * * command ・・・毎分実行
0 * * * * command ・・・毎時0分に実行
5 4 * * * command ・・・毎日4時5分に実行
0 1,3,5-9 * * * command ・・・1,3,5,6,7,8,9時に実行
0 10 * * 1-5 command ・・・平日(月-金)の10時に実行
*/10 * * * * command ・・・10分毎(0,10,20,30,40,50分)に実行
ちょっと応用
* * * * * sleep 30 ; command ・・・毎分30秒に実行(毎分実行のものと若干ずらす際によく使用する)
3-53/10 * * * * command ・・・3,13,23,33,43,53分に実行
2-57/5 * * * * command ・・・2,7,12,17,22,27,32,37,4247,52,57分に実行
その他特殊な書き方
@reboot command ・・・(cronデーモンが)起動した際に一度だけ実行
@daily command ・・・毎日0時0分に実行(0 0 * * * と同じ)
@weekly command ・・・毎週日曜日の0時0分に実行(0 0 * * 0 と同じ)
55 23 28-31 * * /usr/bin/test `date -d tomorrow +\%d` -eq 1 && command ・・・月末の23時55分に実行
その他特殊な書き方(その2)
第○△曜日に実行したい場合
・考え方
第1△曜日:1~7日に登場
第2△曜日:8~14日に登場
第3△曜日:15~21日に登場
第4△曜日:22~28日に登場
この日付の範囲であり かつ 曜日が合致すればよい。
0 2 1-7 * * /usr/bin/test `date +\%w` -eq 5 && command ・・・毎月第1金曜日2時に実行
0 2 8-14 * * /usr/bin/test `date +\%w` -eq 1 && command ・・・毎月第2月曜日2時に実行
0 2 15-21 * * /usr/bin/test `date +\%w` -eq 3 && command ・・・毎月第3水曜日2時に実行
その他
・ターミナルでコマンドを直接実行すると動くのに、cronだと思ったように動かない・・・というトラブルが稀によくある
→コマンド実行時とcron実行時の環境変数の違いが原因かも