◆ cronとは
例えば、「毎週土曜日にデータのバックアップを取得する」といった定期的なジョブを実行するためには、
cronを使用します。cronとは、スケジュールを定義したコマンドを定期的に実行するプログラムのことで
デーモン(DAEMON)とも呼ばれます。なお、1回限りのジョブ予約はatコマンドでスケジュールできます。
◆ crontabコマンド
cronは、スケジュール管理のデーモンであるcrondと、スケジュールを編集するcrontabコマンドにより
構成されます。crondは1分ごとに起動されて、crontabファイルをチェックしてスケジュールがある場合
そのジョブを実行。cronは全てのユーザが利用できます。ユーザのcrontabファイルは、/var/spool/cron
ディレクトリ下に置かれます。ユーザーmikeの場合、/var/spool/cron/mikeというファイルになります。
◆ 構文 : crontab [ オプション ]
オプション |
説明 |
-e |
viエディタなどを使用して、crontabファイルを編集 |
-l |
crontabファイルの内容を表示 |
-r |
crontabファイルの削除 |
-i |
crontabファイル削除時の確認 |
-u ユーザー |
ユーザーを指定しcrontabファイルの編集 ( rootユーザーのみ使用可能 ) |
crontab -eコマンドにより、crontabファイルを編集する際のcrontabフィールドの書式は以下です。
以下の各フィールドに合致した日時になるとコマンドが実行されます。
◆ フィールド : minute hour day month week command
フィールド |
説明 |
minute |
分を設定。0 〜 59 までの数字。または * を設定。 |
hour |
時を設定。0 〜 23 までの数字。または * を設定。 |
day |
日を設定。1 〜 31 までの数字。または * を設定。 |
month |
月を設定。1 〜 12 までの数字。または Jan 〜 Decの文字列。または * を設定。 |
week |
週を設定。0 〜 7 までの整数。または Sun, Mon などの文字列。または * を設定。
( 1=月、2=火、3=水、4=木、5=金、6=土、7と0 =日) |
command |
実行するコマンドを設定。 |
◆ 実行例 : 毎日22:30 に、/usr/local/bin/backup.shプログラムを実行 ( * は全ての値に合致する )
30 22 * * * /usr/local/bin/backup.sh |
◆ 実行例 : 毎週月曜日、火曜日の12:00に、/usr/local/bin/backup.shプログラムを実行 (複数の値を指定するには
, で区切る )
0 12 * * 1,2 /usr/local/bin/backup.sh |
◆ 実行例 : 6時間ごとに、/usr/local/bin/backup.shプログラムを実行 ( */6 のように指定することで間隔を指定できる
)
0 */6 * * * /usr/local/bin/backup.sh |
◆ システムのcrontabコマンド
システム用のcrontab( /etc/crontab )ファイルでは、そこから以下のディレクトリに置かれたファイルを
呼び出すようになっており/etc/crontabファイルには実行するユーザ名を指定するフィールドが加わります。
◆ cronで定期的に実行するジョブを格納するディレクトリ
ディレクトリ名 |
説明 |
/etc/cron.hourly |
毎時定期的に実行するジョブのスクリプトを格納 |
/etc/cron.daily |
毎日定期的に実行するジョブのスクリプトを格納 |
/etc/cron.monthly |
毎月定期的に実行するジョブのスクリプトを格納 |
/etc/cron.weekly |
毎週定期的に実行するジョブのスクリプトを格納 |
/etc/cron.d |
上記以外のジョブのスクリプトを格納 |
◆ atコマンド
cronコマンドは定期的なジョブ実行で使用するのに対して、atコマンドは1回だけジョブ実行する際に使用。
なお、atコマンドのスケジューリングを実行するためには atd(atデーモン)が動作している必要があります。
◆ 構文 : at [ オプション ]
オプション |
説明 |
-d ジョブ |
atコマンドで予約したジョブを削除するコマンド。ジョブ番号を指定し削除 ( atrmコマンドと同じ ) |
-l |
atコマンドで予約したジョブを表示するコマンド。(atqコマンドと同じ ) |
-f |
コマンドを記述したファイルを指定 |
atコマンドは対話形式でコマンドを指定します。実行日時を指定すると入力モードになるので、そこで
実行したいコマンドを入力して、入力後にCtrl + Dキーを入力して at コマンドを終了させます。
◆ 実行例 : 明日の 6:00 に/usr/local/bin/backup.shプログラムを実行
# at 6:00 tomorrow
#> /usr/local/bin/backup.sh
#> ^d ← 終了するために Ctrl + Dキーを入力
|
◆ atコマンドでの日時指定オプション
オプション |
書式 |
noon |
正午 ( 12:00 ) |
midnight |
真夜中 ( 24:00 ) |
teatime |
16:00 |
today |
今日 |
tomorrow |
明日 |
now + 2 days |
2日後 |
あるいは、対話形式ではなく事前にテキストファイルにコマンドを記述しておき、そのファイルを指定する
場合には以下のように実行します。以下の例では testjobファイルにあらかじめコマンドを定義しています。
◆ cronコマンドのアクセス制御
cronは初期状態では利用制限が行われていないため、すべてのユーザーが実行することができます。
cronを利用するユーザーを制限するためには、/etc/cron.allowファイルと/etc/cron.denyファイル
を使用します。そして、cronを利用可能なユーザーの設定は、/etc/cron.allowファイルで定義して、
利用させないユーザーの設定は、/etc/cron.denyファイルで定義します。
◆ 設定例 : 「 mike 」と「 ken 」に対してcronを利用可能にする設定
# vi /etc/cron.allow
mike
ken
|
◇ cronのアクセス制御は以下の順番でチェックされていきます。
1. /etc/cron.allowファイルがある場合、そこに記述されたユーザーのみが利用可能。
2. /etc/cron.allowファイルがない場合、/etc/cron.denyファイルを参照して/etc/cron.denyファイルに
記述されていない全てのユーザがcronを利用できる。
3. /etc/cron.allowファイル、/etc/cron.denyファイルのどちらもない場合、全てのユーザがcronを利用可。
※ 最新のバージョンでは、全てのユーザがcronを利用できるのではなくて、rootユーザのみが利用可能です。
◆ atコマンドのアクセス制御
atは、初期状態では利用制限が行われていないため、すべてのユーザが実行することができます。
atを利用するユーザーを制限するためには、/etc/at.allowファイルと/etc/at.denyファイルを
使用します。/etc/at.allowファイルで利用可能なユーザーを定義して、/etc/at.denyファイルで
利用できないユーザーを定義します。
◆ 設定例 : 「 mike 」と「 ken 」に対して at を利用可能にする設定
# vi /etc/at.allow
mike
ken
|
◇ atのアクセス制御は以下の順番でチェックされていきます。
1. /etc/at.allowファイルがある場合、そこに記述されたユーザーのみが利用可能。
2. /etc/at.allowファイルがない場合、/etc/at.denyファイルを参照して、/etc/at.denyファイルに
記述されていない全てのユーザが at を利用できる。
3. /etc/at.allowファイル、/etc/at.denyファイルのどちらもない場合、rootユーザーだけが利用できる。
cronとatでは3.の動作だけ異なります。なお、atの場合、デフォルトで空の/etc/at.denyファイルがあり、
全てのユーザーがatコマンドを利用できるようになっています。
|