cron ======== ジョブ実行デーモン -------- {{TOC 3-}} ### cron とは きまった周期でジョブを実行するための仕組みです。 crond というデーモンが、稼動プログラムです。 ### cron 構成ファイル cron 周りのファイル/ディレクトリには、以下のようなものがあります。 * /etc/crontab cron を実行するための情報が書かれて * /etc/cron.d/ カスタマイズした crontab 相当のファイルを置いておくところ。 * /etc/cron.hourly/ 1時間ごとに実行されるジョブの置かれるディレクトリ * /etc/cron.daily/ 毎日実行されるジョブの置かれるディレクトリ * /etc/cron.weekly/ 毎週実行されるジョブの置かれるディレクトリ * /etc/cron.monthly/ 毎月実行されるジョブの置かれるディレクトリ * /var/spool/cron/ ユーザごとの crron 設定が置かれる。 ### crontab crontab ファイルには、cron を実行するための情報が書かれています。 [crontab] SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 59 4 * * * root run-parts /etc/cron.daily 5 4 * * 0 root run-parts /etc/cron.weekly 9 4 1 * * root run-parts /etc/cron.monthly * SHELL=/bin/bash cron が使用するシェルを指定します。 * PATH=/sbin:/bin:/usr/sbin:/usr/bin cron が使用する PATH を指定します。 * MAILTO="" ここで指定したユーザに cron の実行結果をメールします。MAILTO="" とすると、メールしません。MAILTO 行 自体がなければ、crontab ファイルの所有者にメールを送ります(デフォルトはroot)。 * HOME=/ cron を使用する際のホームディレクトリを指定します。 * \# run-parts 行頭に # でコメントが書けます #### run-parts ここに書かれている実行ジョブを編集することはないと思いますが、一応解説。 書式は 分 時 日 月 曜日 実行ユーザ run-parts command それぞれ半角スペースで区切られます。 全てに該当させる場合は * (アスタリスク)を指定します。 01 * * * * root run-parts /etc/cron.hourly 上記は、全ての曜日、全ての月、全ての日、全ての時刻の 1分に root 権限で /etc/cron.hourly を実行するということです。 この場合、/etc/cron.hourly はディレクトリで、run-parts というオプションでディレクトリ内のシェルを全て実行するという意味になります。 ### crontab -l $ crontab -l cron の設定状況を出力します。 ### crontab -e cron 実行するジョブを登録します。 cron 実行するジョブは、`crontab -e` というコマンドを用いて、ユーザごとの crontab にジョブを追記します。 $ crontab -e 実行したユーザの cron を編集するために、vi が起動します。 crontabファイルの run-parts 以下と同様に1行に1ジョブを記述します。 分 時 日 月 曜日 コマンド * 分 0~59で指定。*(ワイルドカードで全指定) * 時 0~23で指定。*(ワイルドカードで全指定) * 日 1~31で指定。*(ワイルドカードで全指定) * 月 1~12で指定。*(ワイルドカードで全指定) * 曜日 0~7で指定。0,7が日曜日、1が月曜日、6が土曜日。*(ワイルドカードで全指定) * コマンド 指定するコマンドは実行権限が必要 #### crontab 登録例 5 * * * * foo_command 毎時5分にコマンドを実行します。 0,10,20,30,40,50 * * * * foo_command 10分ごとにコマンドを実行します。 */10 * * * * foo_command 10分ごとにコマンドを実行します。 0,30 * * * 1-5 foo_command 月曜から金曜は毎時0分と30分にコマンドを実行します。 コマンドは、セミコロンつなぎで複数書くことも出来ます。 */10 * * * * cd hoge; foo_command; ### cron 設定の保存される場所 crontab で設定した cron は /var/spool/cron/USER_NAME というファイルに保存されます。 /var/spool/cron/USER_NAME を直接編集しても、OKです (注: ディストリビューションによってことなることもあるかもしれません) ### crontab -r $ crontab -r cron の設定を削除します。 -r と -e はキーが隣同士なので、間違うと悲惨です。個人的に以下のようにしています。 # .bashrc alias crontab='crontab -i' ### SEE ALSO * $ man cron * $ man crontab