rootでcrontab -e してコピペして保存
# コマンドの実行に、デフォルトの /bin/sh ではなく /bin/bash を使用する。
SHELL=/bin/bash
# root PATHを設定
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin:/opt/aws/bin
# mailを送信したくない時
MAILTO=""
# JSTかUSTかシステムに合わせる。これはJST ログはmessageに書く
0 19 * * * shutdown -h now 2>&1 | logger -t shutdown -p local0.info
- crontabのPATHが通ってなくて失敗する時があるのでPATHを通したい(shutdownとか)
- mailを送信したくない時はMAILTO=""
crontabの書き方
時刻設定の例
43 23 * * * 23:43に実行
12 05 * * * 05:12に実行
0 17 * * * 17:00に実行
0 17 * * 1 毎週月曜の 17:00に実行
0,10 17 * * 0,2,3 毎週日,火,水曜の 17:00と 17:10に実行
0-10 17 1 * * 毎月 1日の 17:00から17:10まで 1分毎に実行
0 0 1,15 * 1 毎月 1日と 15日と 月曜日の 0:00に実行
42 4 1 * * 毎月 1日の 4:42分に実行
0 21 * * 1-6 月曜日から土曜まで 21:00に実行
0,10,20,30,40,50 * * * * 10分おきに実行
*/10 * * * * 10分おきに実行
* 1 * * * 1:00から 1:59まで 1分おきに実行
0 1 * * * 1:00に実行
0 */1 * * * 毎時 0分に 1時間おきに実行
0 * * * * 毎時 0分に 1時間おきに実行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02に実行
30 5 1,15 * * 1日と 15日の 5:30に実行
書き方のポイント
- 実行結果をdev/nullに捨てない。
ダメ 2 2 * * * hoge.php > /dev/null 2>&1
良い 2 2 * * * hoge.php > hogee.log 2>&1
- 環境変数の指定をcrontabの中に書く時,シェル内での指定と違い右辺の環境変数が展開されない点に注意が必要。
ダメ PATH=/usr/local/bin:$PATH
良い PATH=/usr/local/bin:/usr/bin:/bin
- 特定の処理のみメール送信
0 2 * * * /bin/sh /etc/hogehoge 2>&1 | Mail [送信先メールアドレス]
- ~/.bashrcにalias crontab='crontab -i 'を追記してcrontab -rに確認をつける。
~/.bashrc
# crontab -e(編集)と-r(削除)の押し間違い防止
alias crontab='crontab -i '
【>/dev/null 2>&1】とは??(これやると何が起きているのかわからないのでダメ)
- /dev/nullはごみ箱
- 2>&1は2標準エラーを1標準出力に出す。
- つまり、標準エラーと標準出力をごみ箱にすてて表示させない。という記述
ベター ファイルに出力する
- どこに出力したかわかりやすい
3 19 * * * shutdown -h now >> shutdown.log 2>&1
ベスト syslog に記録 : logger コマンドに渡す
- ログファイルをローテーションしてくれる
- 多数のホストで実行する場合、ログを一カ所に集約したい
3 19 * * * shutdown -h now 2>&1 | logger -t shutdown -p local0.info
- ログ確認するコマンド
# tail -f /var/log/messages
Jan 16 11:05:02 ip-172-31-5-106 shutdown: hoge
Jan 16 11:06:01 ip-172-31-5-106 shutdown: hoge
- もしサーバが立てたばかりで、UTC,JSTを切替えた直後などは、crondを再起動しよう
sudo service crond restart