Cronとは
Unix系OSで使われる常駐プログラム(デーモン)の一種です。Windowsでの「タスクスケジューラー」みたいに、日時を指定して任意のコマンドやシェルスクリプトを自動実行してくれます。実行スケジュールは、毎月、毎週、毎日等細かく指定できます。
ここでは Cron を使って定期的にコマンドを実行する方法をまとめます。
なお OS は CentOS7 を利用します。
Cronのインストールと起動設定
# yum install cronie
CentOS7ではデフォルトで「cronie」がインストールされていますが、一応インストールを行います。
# systemctl status crond
Cron の起動状態を確認します。「active (running)」となっていれば起動中です。
起動していない場合は、以下のコマンドで起動設定を行い、OS起動時に Cron も自動起動するようにしておきましょう。
# systemctl start crond
# systemctl enable crond
スケジュールの設定
Cron でスケジュールを設定するには crontab コマンドを実行します。書式とオプションは以下の通りです。
crontab [-u ユーザー] { -e | -l | -r }
-u: 指定したユーザーのcrontabファイルを操作します。
-l: crontabファイルの内容を表示します。
-r: crontabファイルを削除します。
-e: crontabファイルを編集します。
crontabファイルにスケジュールを設定してみます。
$ crontab -e
上記コマンドを実行すると、エディタが開きますので、実行するコマンドを設定します。なお、ユーザーの指定がない場合、実行ユーザーは設定を行ったユーザーになります。
ファイルの書式
# コメント
分 時 日 月 曜日 コマンド
対象 | 値 |
---|---|
分 | 0~59 |
時 | 0~23 |
日 | 1~31 |
月 | 1~12 または jan~dec |
曜日 | 0~7 または sun~sat(0,7は日曜日) |
コマンド | 実行したいコマンドやシェルを指定します。 |
分、時、日、月、曜日には設定値としてワイルドカード(*)を指定することで、毎分や毎時といった意味になります。全て(*)の場合、毎分コマンドが延々と実行されることになります。
特殊な値の指定方法
値の指定には範囲指定、リスト指定、間隔指定という指定方法があります。
指定方法 | 例 | 説明 |
---|---|---|
範囲指定 | 1-5 | ハイフン区切りで範囲を指定できます。1時から5時などの指定。 |
リスト指定 | 10,20,30 | カンマ区切りで複数の値を指定できます。10,20,30日などの指定。 |
間隔指定 | */2 | スラッシュの後に間隔を指定することで、間隔指定ができます。月の設定を*/2とすると、1月から隔月の指定になります。 |
スケジュール設定の確認
上記の書式でジョブを設定してみます。毎分ログファイルに日時を書きだすようにして、動作を確認します。
ファイルには1行につき1ジョブ記述します。
* * * * * echo `date +"\%Y-\%m-\%d \%H:\%M:\%S"` >> /tmp/cron.log
/tmp/cron.logに毎分のログが書き込まれますので動作が確認できます。確認が終わったらこのジョブは消しておきましょう。
毎週日曜日の0時0分にスクリプトを実行
毎週日曜日の0時0分にスクリプト(hoge.sh)を実行するようにジョブは以下のように記述します。
0 0 * * sun hoge.sh
実行されないとき
実行が確認できないときは起動確認とログファイルを見ておけば何とかなるかもしれません。
# systemctl status crond
# vi /var/log/cron
以上。
# から始まる行はコメントアウトとして解釈されるため,ブラウザ上でほとんどグレーアウトされており,訪問者が読むことはできません。
Cronのインストールと起動設定
# yum install cronie ←この行はデザイン上はコメント行なので,訪問者の目にほとんど読めない
見づらいです。