Linux - Job Scheduling



 ◆ 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ファイルにあらかじめコマンドを定義しています。

 # at -f testjob 15:00


 ◆ 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コマンドを利用できるようになっています。



Linux 技術入門

Copyright(C) 2002-2024 ネットワークエンジニアとして All Rights Reserved