コマンドを自動実行してくれるcronの設定です。
デフォルトの設定ファイル
cronのデフォルトの設定ファイルは/etc/crontabです。
SHELL=/bin/sh 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行が環境設定
値はダブルクオートやシングルクオートで囲っても良い。
空の値はMAILTO=”のようにする。
- SHELL … /etc/passwordの記述に関係なく、強制的にここで定義されたシェルを使います。
- PATH … PATHの設定です。
- MAILTO … cronの実行結果をここで指定されたユーザー宛にメールで送ります。ユーザー名を空にするとメールを送信しません。ただし、MAILTOの記述自体をしないと、crontabファイルの所有者にメールを送ります(デフォルトではroot)。
- HOME … cronを実行する際のホームディレクトリの設定です。
※ run-parts以下がcronが実行するタスクになります
タスクの登録
自分で新たにタスクを登録するには、/etc/crontabに書いてもいいのですが、それだとrootでしか登録ができません。なので実際には別のファイルにタスクを書きます。
タスクを記述するファイルは
FreeBSDの場合、/var/cron/tabs/ユーザー名(rootの場合、/var/cron/tabs/root になります。)
エディタでファイルを新規作成しても構いませんが、専用のコマンド「crontab」を使います。
crontab -e
とすると実行したユーザー用のファイルを新規作成して、編集できるようになります。デフォルトではviが起動します。
書式
分 時 日 月 曜日 (ユーザー) コマンド です。(ユーザー)は通常必要ない。
01 * * * * root run-parts /etc/cron.hourly
上記は、毎時1分にrootユーザー権限で「run-parts /etc/cron.hourly」を実行します。run-partsスクリプトは指定されたディレクトリ以下を全て実行するコマンドです。
- 分 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=
を追加します。こうすると全ての実行結果が送られないようになります。特定の実行結果のみメールの送信を止めたい場合は、
*/10 * * * * コマンド > /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
に出力されています。
それとvimでバックアップファイルを作る設定にしているとcrontab -eでうまく登録されない事があります。