cronの設定

20年近く前に作成したメモ。現状でもほとんど変更が無いはずなので、健忘禄メモとして。

cronの設定
コマンドを自動実行してくれるcronの設定です。最近のディストリビューションでcronがインストールされないものはないと思います。ただ、ひょっとすると動いていないかもしれない(自分で止めていない限り動いていると思いますが)ので、ps -ax などでcronが動いているか確認してください。動いていない場合は

/etc/rc.d/init.d/crond start
で動かしてください。

/etc/crontab
cronのデフォルトの設定ファイルは/etc/crontabです。Vine2.5では以下のようになっています。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

run-parts

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

最初の4行が環境設定になっています。

SHELL
/etc/passwordの記述に関係なく、強制的にここで定義されたシェルを使います。
PATH
PATHの設定です。
MAILTO
cronの実行結果をここで指定されたユーザー宛にメールで送ります。ユーザー名を空にするとメールを送信しません。ただし、MAILTOの記述自体をしないと、crontabファイルの所有者にメールを送ります(デフォルトではroot)。
HOME
cronを実行する際のホームディレクトリの設定です。

run-parts以下がcronが実行するタスクになります。

書式は、

分 時 日 月 曜日 (ユーザー) コマンド

です。(ユーザー)は通常必要ありません。

01 * * * * root run-parts /etc/cron.hourly
上記は、毎時1分にrootユーザー権限で「run-parts /etc/cron.hourly」を実行します。run-partsスクリプトは指定されたディレクトリ以下を全て実行するコマンドです。/etc/cron.~というディレクトリを見てみるといくつかのスクリプトがあると思います。

タスクの登録
自分で新たにタスクを登録するには、/etc/crontabに書いてもいいのですが、それだとrootでしか登録ができません(/etc/crontabの所有者がrootなので)。なので実際には別のファイルにタスクを書きます(何度も書きますが、/etc/crontabに直接書いてしまっても構いません)。

タスクを記述するファイルはVine2.5の場合、「/var/spool/cron/ユーザー名」です。rootの場合、「/var/spool/cron/root」になります。emacs等のエディタでファイルを新規作成しても構いませんが、専用のコマンド「crontab」を使った方が楽だと(私は)思います。

$ crontab -e
とすると実行したユーザー用のファイルを新規作成して、編集できるようになります。デフォルトではviが起動します。

記述する書式は、先ほども書きましたが、

分 時 日 月 曜日 コマンド
です。


0~59で指定します。(ワイルドカード)も使用可能です。 時 0~23で指定します。(ワイルドカード)も使用可能です。

1~31で指定します。(ワイルドカード)も使用可能です。 月 1~12で指定します。(ワイルドカード)も使用可能です。また、月の名前の最初の3文字で指定することもできます。jun、julなど。
曜日
0~7で指定します。(ワイルドカード)も使用可能です。0と7が日曜日で6が土曜日です。また、sun等の名前で指定することもできます。 コマンド cronが実行するコマンドです。当然実行可能なものでなければいけません。 日付、時間の部分は範囲指定が可能です。例えば1時、2時、3時なら、時間のフィールドに「1,2,3」と書く代わりに「1-3」と書けます。また、何分おき(あるいは何時間おき)という場合は「/」の後に書きます。2時間おきなら「*/2」です。「1,4,7,10」は「1-10/3」と書くこともできます。

10分おきに特定のコマンドを実行するには、

0,10,20,30,40,50 * * * * コマンド
とします。またこれは、

*/10 * * * * コマンド
と書くこともできます。

注意として、書くフィールドは必ず左側から指定するようにしましょう。例えば、毎日1時にコマンドを実行しようとして

  • 1 * * * コマンド
    なんて書いてしまうと、毎日1時0分から1時59分まで1分おきにコマンドが実行されてしまいます。こういう場合は

0 1 * * * コマンド
などと「分」の部分も指定しましょう。これで毎日1時0分にコマンドが実行されます。

1時間おきなら、

0 */1 * * * コマンド
としたいところですが、単に

0 * * * * コマンド
でも結果は同じです。

cronは実行結果をメールで送ってきます。これが邪魔だと思ったら、「MAILTO=」を追加します。こうすると全ての実行結果が送られないようになります。特定の実行結果のみメールの送信を止めたい場合は、「コマンド > /dev/null 2>&1」としてください。

crontab -e でタスクを登録したら、

$ crontab -l
としてちゃんと登録されているか確認しましょう。ついでに

$ crontab -r
とすると全てのタスクが削除されます。

cronは1分おきに設定ファイルを監視しているのでタスクを登録してもcronの再起動をする必要はありません。ただし、監視は1分おきなので、「1時34分30秒」に「1時35分」に実行するタスクを登録してもcronは実行してくれません。これは「1時35分」に新たなタスクが登録されたとcronが認識するためです。

もし、タスクが実行されなかったら、ログファイルを眺めてください。ログは「/var/log/cron」に出力されています。

コメント

PAGE TOP