cronは時刻、日付、月、曜日を指定することで定期的に繰り返し実行されるタスクを設定できます。例えば毎週月曜日の午後5時にあるコマンド
を実行するといったことが可能になります。cronは設定したタスクの実行時刻にシステムが稼動していない場合、そのタスクを実行することはありません。
cronを使用するにはcronデーモンを起動しておく必要があります。
#/etc/rc.d/init.d/crond start
cronの設定ファイル(/etc/crontab)を開きます。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
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 |
使用するシェルの設定 |
| PATH |
パスの定義 |
| MAILTO |
指定されたユーザ宛にcronの実行結果をメール送信する(空白の場合(MAILTO="")はメール送信を行わない。
またMAILTO自体を記述しない場合は/etc/crontabの所有者にメール送信される。)また複数のユーザを指定したい
場合はユーザ名をカンマ(,)で区切る。 |
| HOME |
コマンドを実行する際のホームディレクトリの設定 |
そして# run-parts以下からcronに定期的に実行させたいタスクを記述していきます。フォーマットは以下の通りです。
分 時 日 月 曜日 ユーザ コマンド
| 分 |
0~59の整数 |
| 時 |
0~23の整数 |
| 日 |
1~31の整数 |
| 月 |
1~12の整数または月の短縮名(janなど) |
| 曜日 |
0~7の整数(0と7は日曜日)または曜日の短縮名(sunなど) |
| ユーザ |
実行するユーザ |
| コマンド |
実行するコマンド |
アスタリスク(*)を指定することもできます。これは全ての有効な値が設定されたことになります。例えば1~12月を指定する場合、月の部分を"*"とします。
値をカンマ(,)で区切り複数指定することができます。例えば1日、5日、10日を指定する場合、日の部分を"1,5,10"とします。
連続した値をハイフン(-)で範囲指定することもできます。例えば1日、2日、3日を指定する場合、日の部分を"1-3"とします。
値をスキップさせたい場合は"/"の後にスキップする幅を指定します。例えば5日おきを指定する場合は日の部分を"*/5"とします。
また"1-10/3"のように指定することもできます。これは日の場合は1日、4日、7日、10日を指定しています。
1月の毎週火曜日にhogeコマンドを1時間おきに実行する場合は、
0 */1 * 1 2 root hoge
となります。
毎月1日の18時にhogeコマンドを実行する場合は、
0 18 1 * * root hoge
となります。
cronはこの設定ファイル(/etc/crontab)以外にも/etc/cron.d/ディレクトリ内のスクリプトファイルや後で説明するcrontabコマンドによって
作成されたユーザ個別のcrontab(/var/spool/cronディレクトリ内にユーザ名で保存されるファイル)も参照するため
そこにタスクスケジュールしてもよい。
また上記の/etc/crontabでは/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthlyディレクトリ
内のスクリプトファイルをそれぞれ毎時、毎日、毎週、毎月実行するようにスケジュールされているので直接/etc/crontabを
編集せずにそれぞれ実行したい間隔に合うディレクトリに実行するスクリプトファイルを保存し、細かい設定を行う
タスクスケジューリングは後で説明するcrontabコマンドを利用するのが良い。
例えば毎時に時間設定をするntpdateコマンドを実行したい場合は/etc/cron.hourlyディレクトリ内に以下のスクリプトファイル
を保存する。
#vi ntpdate.cron
#!/bin/sh
/usr/sbin/ntpdate -b 133.100.9.2 133.100.11.8 130.69.251.23 133.31.30.8
パーミッションを755に設定する。
#chmod 755 ntpdate.cron
以上で毎時1分にntpdate.cronが実行される。
crontabコマンドを使用することで、各ユーザがそれぞれ定期的に実行するタスクの設定を行うことができる。
(ユーザはそれぞれ自分専用のcrontabを所有できる。これは"/var/spool/cron/ユーザ名"というファイルで保存される。)
crontabコマンドの構文は以下の通りである。
構文
crontab [ オプション ] [ ファイル名 ]
オプション
| -e |
環境変数VISUALまたはEDITORで指定されているエディタで現在のcrontabを編集する。 |
| -l |
登録されているcrontabを表示する。 |
| -r |
登録されているcrontabを削除する。 |
| -u ユーザ名 |
設定するcrontabの所有者名(ユーザ名)を指定する。 |
-uオプションを省略した場合はコマンドを実行したユーザのcrontabを編集することになる。
またファイル名を指定することで、新しいcrontabに指定したファイルからインポートすることができる。
"crontab -e"でタスクスケジュールする場合は
cron設定ファイルで説明したフォーマットからユーザフィールドを
排除したものでそれ以外は同じである。
上記参照
分 時 日 月 曜日 コマンド
例えば毎週月曜日の4時にhogeコマンドを実行しユーザcyberamにメール通知したい場合は、
$crontab -e
MAILTO=cyberam
0 4 * * 1 hoge
となります。
cronの使用を制限したい場合は/etc/cron.allow、/etc/cron.denyファイルを使用します。
これらのファイル内の1行に1つのユーザ名という形式で記述していきます。スーパーユーザはこれらのファイルに関係なくcronを使用できます。制限方法は以下のとおりです。
1. /etc/cron.allow が存在すれば /etc/cron.deny の有無に関係なく、/etc/cron.allow に記述されたユーザのみcronを使用できます。
2. /etc/cron.allow が存在するが中身が空であれば /etc/cron.deny の有無に関係なく、スーパーユーザのみcronを使用できます。
3. /etc/cron.allow が存在せず、/etc/cron.deny が存在すれば /etc/cron.deny に記述されたユーザ以外cronを使用できます。
4. /etc/cron.allow が存在せず、/etc/cron.deny が存在するが中身が空であれば全てのユーザがcronを使用できます。
5. どちらのファイルも存在しない場合は全てのユーザがcronを使用できます。