開発を行っていると、日次,週次,月次バッチ処理の作成とスケジュール管理が必要な場面が出てきますが、そういったバッチ処理を登録した通りに実行してくれるのがcrontabというコマンドです。
DBや、APから生み出されるデータのバックアップを毎日定時に取る、ファイルの掃除を定期で行う、自動ツイートバッチを1時間置きに動かしたい、こういった場面でcrontabは活躍します。
ここではちょくちょく使うcrontabの設定のメモ書きになります。
crontabコマンドの書式
オプション | |
---|---|
-l | crontabファイルの内容を表示 |
-e | crontabファイルを編集 |
-r | crontabファイルを削除 |
[-u user] | ※rootユーザのみ使用可。userで指定したユーザのcrontabファイルを操作 |
crontabファイル内の書式
# (行頭の # マークはコメント行を示す) # +------------ 分 (0 - 59) # | +---------- 時 (0 - 23) # | | +-------- 日 (1 - 31) # | | | +------ 月 (1 - 12) # | | | | +---- 曜日 (0 - 6) (日曜日=0) # | | | | | # * * * * * 実行されるコマンド #例)毎日5:35にmysqlの全データを/data/backup/sqloutファイルにバックアップ 35 5 * * * root mysqldump -u UserName -pPassword -x --all-databases > /data/backup/sqlout 2>&1 #例)毎時0分にコマンド実行 0 * * * * root Command #例)毎週火曜日10:00にコマンド実行 0 10 * * 2 root Command #例)毎月1日3:00にコマンド実行 0 3 1 * * root Command #例)毎年12月31日23:55にコマンド実行 55 23 31 12 * root Command #例)毎日8:30と17:30にコマンド実行 30 8,17 * * * root Command #例)月~金の10:00にコマンド実行 0 10 * * 1-5 root Command #例)10分ごとにコマンド実行 */10 * * * * root Command #例)1時間ごとにコマンド実行 0 */1 * * * root Command #例)毎分コマンド実行 * * * * * root Command #例)土日の5~10時、15~20時に5分毎にコマンド実行 */5 5-10,15-20 * * 6,0 root Command #例)毎月の月末日の12:00にコマンド実行 0 12 28-31 * * /usr/bin/test $( date -d '+1 day' +%d ) -eq 1 && Command
crontabファイルの編集
crontabコマンドでファイルを開くには「crontab -e」と入力しますが、注意したいのが rキーの存在です。入力ミスで「crontab -r」としてしまったら最後、crontabファイルが削除されます。
いくら気を付けていても人間ですからいつか必ず間違える時がくると思います。そんな時の為に対策をとっておく必要があります。
私の場合は、viコマンドで/etc/crontabを直接開いて編集しており、crontabコマンドを使う事はありません。
自分が管理しているサーバであればこの方法で十分ではないでしょうか。