cronの設定
##エディタで設定
実行コマンド
crontab [ -u ユーザ名 ] { -l | -r | -e }
option
-u: cronを設定するユーザーを指定
-l: cronを一覧で表示
-r: cronの設定を全消去
-e: cronを設定するエディタを起動する
###1.エディタを起動
crontab -e
2.設定を記述
以下の書式に従って設定する。
分 時 日 月 曜日 <実行コマンド>
実行時間を固定して指定
15時になる度に実行
0 15 * * * echo "hello."
実行間隔を指定
5分毎に実行
*/5 * * * * echo "hello."
複数時間を指定
午前2時5分と午前2時10分に実行
5,10 2 * * * echo "hello."
実行時間範囲を指定
午前2時5分、午前3時5分、午前4時5分、午前5時5分に実行
5 2-5 * * * echo "hello."
上記のように記述したあと、保存してエディタを閉じれば設定完了。
設定ファイルの読み込み
設定ファイルを読み込んでcronを設定
//ファイル生成
echo '*/5 * * * * echo "hello."' > cron.conf
//読み込み
crontab cron.conf
crontab -e
で設定できるけど、誤ってcrontab -r
をすると設定が全部消えて泣くので設定ファイルを用意して読み込むのがベター。
ファイルで設定
/etc/cron.d/
に拡張子なしのファイルを置く。
5 2-5 * * * echo "hello."
設定内容の確認
下記コマンドで設定しているcrontabを確認できる。
crontab -l
メール送信機能の停止
cronには実行時にメールを送信する機能がデフォルトで入っている。
不要なので停止したいそんなとき。
パターン1:MAILTO=""
設定箇所は以下の3つ
・/etc/crontab
・/etc/cron.d/0hourly
・/var/spool/cron/(各ユーザのcrontab)
とりあえずMAILTO="..."
があればそこを空白を設定する。MAILTO=""
パターン2:crondの設定変更
下記コマンドを打つと
sudo cat /etc/sysconfig/crond
下記が表示される
# Settings for the CRON daemon.
# CRONDARGS= : any extra command-line startup arguments for crond
CRONDARGS=
viでエディタ開いて"-m off"
を追加する。
# Settings for the CRON daemon.
# CRONDARGS= : any extra command-line startup arguments for crond
CRONDARGS="-m off"
必ずcronデーモンを再起動する
sudo service crond restart
logの出力
標準出力
/path/script.sh 1> /path/exec.log
エラー出力
/path/script.sh 2> /path/error.log
標準&エラー出力
/path/script.sh > /path/both.log 2>&1
標準&エラー出力(ファイル別)
/path/script.sh 1> /path/exec.log 2> /path/error.log
環境変数
cronの実行は手動でshellを動かす場合とは異なりログイン時に適用される環境変数の設定等は反映されない。
そのため手動でshell叩くと動くけどcronでは動かないみたいな事が起きる。
cron実行時にログイン時と同様に環境変数の設定を反映させたい場合下記のように書いておく。
* * * * * bash -l script.sh
他にshellに環境変数の設定を書いておく方法とかある。
#補足
・cronのログは標準でメールが実行ユーザーのメールボックスに送信されるらしい。
EC2だとcat /var/spool/mail/ec2-user
で見れる。