第27章 システムタスクの自動化
タスクは、ジョブ としても知られており、指定期間、またはシステムの負荷平均が 0.8 を下回る場合に自動的に実行するように設定できます。
Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux は、システムの更新を維持するために重要なシステムタスクを実行するように事前設定されています。たとえば、locate コマンドで使用される s locate データベースが毎日更新されます。システム管理者は、自動化されたタスクを使用して定期的なバックアップの実行、システムの監視、カスタムスクリプトの実行などを実行できます。
Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux には、cron、anacron、および batch などの自動化されたタスクユーティリティーが含まれてい ます。
すべてのユーティリティーは、異なるジョブタイプをスケジュールすることを目的としています。Cron および Anacron の繰り返しジョブのスケジュールは、At と Batch が 1 回限りのジョブをスケジュールするためのものです(それぞれ 「cron および Anacron」 と 「at および Batch」 を参照してください)。
27.1. cron および Anacron
Cron と Anacron はどちらもデーモンであり、正確な時間、日、曜日、および週で定義される特定の時点に対して繰り返し実行するタスクをスケジュールできるデーモンです。
Cron ジョブは毎分のみ実行できます。ただし、このユーティリティーは、システムが継続的に実行されていることを前提とし、ジョブがスケジュールされている時にシステムがオンになっていない場合は、ジョブは実行されません。
一方、anacron は、ジョブのスケジュール時にシステムが実行していない場合にスケジュールされたジョブを記憶します。その後、システムは起動したらすぐにジョブが実行されます。ただし、anacron は 1 日 1 回のみジョブを実行できます。
27.1.1. cron および Anacron のインストール
Cron および Anacron をインストールするには、Cron と Anacron を含む cronie パッケージ( cronie-anacron はcronie-anacron のサブパッケージ)をインストールする必要があります。cronie
パッケージがすでにシステムにインストールされているかどうかを確認するには、rpm -q cronie cronie-anacron コマンドを実行します。パッケージがすでにインストールされている場合は、cronie および cronie-anacron パッケージのフルネームを返します。もしくはパッケージが利用できないことを通知します。
パッケージをインストールするには、以下の形式で yum コマンドを使用します。
yum install
package
たとえば、Cron と Anacron の両方をインストールするには、シェルプロンプトで以下を入力します。
~]# yum install cronie cronie-anacron
このコマンドを実行するには、スーパーユーザーの権限 (つまり
root
としてログイン) が必要であることに注意してください。Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux に新しいパッケージをインストールする方法の詳細は、「パッケージのインストール」 を参照してください。
27.1.2. crond サービスの実行
cron ジョブと anacron ジョブの両方が
crond
サービスによって選択されます。本セクションでは、crond
サービスを起動、停止、および再起動する方法を説明し、特定のランレベルでそのサービスを有効にする方法を説明します。ランレベルの概念と Red Hat Enterprise Linux でシステムサービスを管理する方法は、12章サービスおよびデーモン を参照してください。
27.1.2.1. cron サービスの起動と停止
サービスが実行中かどうかを確認するには、コマンド service crond status を使用します。
現行セッションで
crond
サービスを実行するには、root
で次のコマンドを実行します。
servicecrond
start
起動時にサービスが自動的に起動するよう設定するには、以下のコマンドを使用します。
chkconfigcrond
on
このコマンドは、ランレベル 2、3、4、および 5 でサービスを有効にします。または、「サービスの有効化および無効化」 の説明に従って Service Configuration ユーティリティーを使用できます。
27.1.2.2. cron サービスの停止
crond
サービスを停止するには、root
で次のコマンドを実行します。
servicecrond
stop
ブート時のサービスの起動を無効にするには、以下のコマンドを使用します。
chkconfigcrond
off
このコマンドは、すべてのランレベルでサービスを無効にします。または、「サービスの有効化および無効化」 の説明に従って Service Configuration ユーティリティーを使用できます。
27.1.2.3. cron サービスの再起動
crond
サービスを再起動するには、シェルプロンプトで以下を入力します。
servicecrond
restart
このコマンドで、サービスの停止と再起動が連続して行われます。
27.1.3. Anacron ジョブの設定
ジョブをスケジュールするための主な設定ファイルは
/etc/anacrontab
ファイルです。このファイルは root ユーザーのみがアクセスできます。このファイルには、以下が含まれます。
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45 # the jobs will be started during the following hours only START_HOURS_RANGE=3-22 #period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly
最初の 3 行は、anacron タスクを実行する環境を設定する変数を定義します。
SHELL
- ジョブの実行に使用するシェル環境(この例では Bash シェル)PATH
- 実行可能なプログラムへのパスMAILTO
- メールで anacron ジョブの出力を受信するユーザーのユーザー名MAILTO
変数が定義されていない場合(MAILTO=
)、メールは送信されません。
次の 2 つの変数は、定義されたジョブのスケジュール時間を変更します。
RANDOM_DELAY
- 各ジョブに指定されるdelay in minutes
変数に追加される最大分単位数遅延の最小値は、デフォルトでは 6 分に設定されます。たとえば、RANDOM_DELAY
を12
に設定すると、特定の分析内のジョブごとに、6 分から 12 分の間にdelay in minutes
が追加されます。RANDOM_DELAY
0
など、6
以下の値に設定することもできます。0
に設定すると、ランダムな遅延は追加されません。これは、1 つのネットワーク接続を共有する複数のコンピューターが毎日同じデータをダウンロードする必要がある場合などに便利です。START_HOURS_RANGE
- スケジュールされたジョブを実行できる間隔(時間単位)電源障害などの理由で時間間隔がないと、スケジュールされたジョブはその日に実行されません。
/etc/anacrontab
ファイルの残りの行はスケジュールされたジョブを表し、以下の形式に従います。
period in days delay in minutes job-identifier command
period in days
- ジョブ実行の頻度(日数単位)プロパティーの値は整数またはマクロ(@daily
、@weekly
、@monthly
)として定義できます。ここで、@daily
は整数 1 として、@weekly
は 7 と同じ値、@monthly
は月の長さが 1 度実行されることを指定します。delay in minutes
- ジョブを実行する前に、anacron が待機する時間プロパティーの値は整数として定義されます。値が0
に設定されている場合、遅延は適用されません。job-identifier
- ログファイルで使用される特定のジョブを参照する一意の名前command
- 実行するコマンドコマンドは、ls /proc >> /tmp/proc などの コマンド、またはカスタムスクリプトを実行するコマンドのいずれかです。
ハッシュマーク (#) で始まる行はすべてコメントで、これは処理されません。
27.1.3.1. Anacron ジョブの例
以下の例は、簡単な
/etc/anacrontab
ファイルを示しています。
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # the maximal random delay added to the base delay of the jobs RANDOM_DELAY=30 # the jobs will be started during the following hours only START_HOURS_RANGE=16-20 #period in days delay in minutes job-identifier command 1 20 dailyjob nice run-parts /etc/cron.daily 7 25 weeklyjob /etc/weeklyjob.bash @monthly 45 monthlyjob ls /proc >> /tmp/proc
この
anacrontab
ファイルで定義されているすべてのジョブは 6-30 分によって無作為に遅延し、16:00 から 20:00 の間で実行できます。
最初に定義されたジョブは 16:26 から 16:50(RANDOM_DELAY は 6 分から 30 分の間であり、delay in minutes プロパティーが 20 分の間です)。このジョブに指定されたコマンドは、run-parts スクリプトを使用して、
/etc/cron.daily
ディレクトリーに存在するすべてのプログラムを実行します( run-parts スクリプトはディレクトリーをコマンドライン引数として受け入れ、ディレクトリー内のすべてのプログラムを順次実行します)。
2 番目のジョブは、1 週間 1 回
/etc
ディレクトリーで weeklyjob.bash
スクリプトを実行します。
3 番目のジョブはコマンドを実行し、
/proc
の内容を 1 カ月 /tmp/proc
ファイル(ls /proc >> /tmp/proc)に書き込みます。
27.1.4. cron ジョブの設定
cron ジョブの設定ファイルは
/etc/crontab
で、root ユーザーのみが変更できます。このファイルには、以下が含まれます。
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * username command to be executed
最初の 3 行には、
SHELL
、PATH
、および MAILTO
の anacrontab
ファイルと同じ変数定義が含まれます。これらの変数に関する詳細は、「Anacron ジョブの設定」 を参照してください。
また、このファイルは
HOME
変数を定義できます。HOME
変数はディレクトリーを定義します。このディレクトリーは、コマンドまたはジョブで実行されるスクリプトの実行時にホームディレクトリーとして使用されます。
/etc/crontab
ファイルの残りの行はスケジュールされたジョブを表し、以下の形式となっています。
minute hour day month day of week username command
以下は、ジョブの実行時間を定義します。
minute
- 0 から 59 までの任意の整数hour
- 0 から 23 までの整数day
- 1 から 31 までの整数(月を指定する場合は有効な日付である必要があります)month
- 1 から 12 までの整数(または jan または feb などの月の省略名)day of week
- 0 から 7 までの任意の整数。0 または 7 は日曜日を表します(または sun または mon などの曜日の短縮名)。
以下は、他のジョブプロパティーを定義します。
username
- ジョブが実行されるユーザーを指定します。command
- 実行するコマンドコマンドは、ls /proc /tmp/proc などのコマンド、またはカスタムスクリプトを実行するコマンドのいずれかです。
上記のいずれの値でも、アスタリスク(*)を使用して有効な値をすべて指定できます。たとえば、月の値をアスタリスクとして定義する場合、ジョブは、他の値の制約内で毎月実行されます。
整数間のハイフン(-)は整数の範囲を指定します。たとえば、
1-4
は整数の 1、2、3、および 4 を意味します。
コンマで区切られた値の一覧(,)はリストを指定します。たとえば、
3, 4, 6, 8
はこれら 4 つの整数を正確に示します。
スラッシュ(/)を使用して step の値を指定できます。整数の値は、
/integer
の範囲の後に続く範囲内で省略されます。たとえば、0-59/2
で定義される 1 分間の値は、分ごとの分を表します。ステップ値はアスタリスクでも使用することができます。たとえば、月の値が */3
として定義されている場合、タスクは 3 月ごとに実行されます。
ハッシュマーク (#) で始まる行はすべてコメントで、これは処理されません。
root 以外のユーザーは、crontab ユーティリティーを使用して cron タスクを設定できます。ユーザー定義の crontab は
/var/spool/cron/
ディレクトリーに保存され、作成したユーザーが実行したように実行されます。
ユーザーとして crontab を作成するには、そのユーザーでログインし、
VISUAL
または EDITOR
環境変数で指定されたエディターでユーザーの crontab を編集します。このファイルは、/etc/crontab
と同じ形式を使用します。crontab への変更が保存されると、crontab はユーザー名として保存され、/var/spool/cron/ ユーザー名のファイルに書き込まれます
。crontab ファイルの内容を一覧表示するには、crontab -l コマンドを使用します。
ユーザーを指定しないでください。
crontab ユーティリティーを使用してジョブを定義するときにユーザーを指定しないでください。
/etc/cron.d/
ディレクトリーには、/etc/crontab
ファイルと同じ構文を持つファイルが含まれます。このディレクトリーでファイルを作成および変更できるのは、root のみです。
変更を適用するデーモンを再起動しません。
cron デーモンは
/etc/anacrontab
ファイル、/etc/crontab
ファイル、/etc/cron.d/
ディレクトリー、および /var/spool/cron/
ディレクトリーが変更されるたびにチェックし、検出された変更はメモリーに読み込まれます。そのため、anacrontab ファイルまたは crontab ファイルに変更を加えた後にデーモンを再起動する必要はありません。
27.1.5. cron へのアクセスの制御
Cron へのアクセスを制限するには、
/etc/cron.allow
ファイルおよび /etc/cron.deny
ファイルを使用できます。これらのアクセス制御ファイルは、各行にユーザー名が同じ形式を使用します。いずれのファイルでも、空白文字は許可されません。
cron.allow
ファイルが存在する場合は、ファイルに一覧表示されているユーザーのみが cron を使用でき、cron.deny
ファイルは無視されます。
cron.allow
ファイルが存在しない場合は、cron.deny
ファイルにリストされているユーザーは Cron を使用することができません。
アクセス制御ファイルを変更した場合でも、Cron デーモン(
crond
)を再起動する必要はありません。アクセス制御ファイルは、ユーザーが cron ジョブの追加または削除を試みるたびにチェックされます。
root ユーザーは、アクセス制御ファイルに記載されているユーザー名に関係なく、常に cron を使用できます。
PAM(プラグ可能な認証モジュール)を使用してアクセスを制御することもできます。この設定は
/etc/security/access.conf
ファイルに保存されます。たとえば、以下の行をファイルに追加しますが、他のユーザーは作成できませんが、root ユーザーは crontabs を作成することができます。
-:ALL EXCEPT root :cron
禁止されているジョブは、適切なログファイルにログインするか、標準出力に返される「crontab -e」を使用する場合に記録されます。詳細は、
access.conf.5
( man 5 access.conf)を参照してください。
27.1.6. cron ジョブのブラックリストおよびホワイトリスト
ジョブのブラックリストとホワイトリストは、実行する必要がないジョブの一部を定義するために使用されます。これは、
/etc/cron.daily
などの Cron ディレクトリーで run-parts スクリプトを呼び出す場合に便利です。ユーザーがディレクトリーにあるプログラムをジョブのブラックリストに追加すると、run-parts スクリプトはこれらのプログラムを実行しません。
ブラックリストを定義するには、run-parts スクリプトが実行されるディレクトリーに
jobs.deny
ファイルを作成します。たとえば、/etc/cron.daily
から特定のプログラムを省略する必要がある場合は、/etc/cron.daily/jobs.deny
ファイルを作成します。このファイルで、実行から省略するプログラムの名前を指定します(同じディレクトリーにあるプログラムのみを登録できます)。run-parts /etc/cron.daily などの cron.daily ディレクトリーからプログラムを実行するコマンドを実行すると、jobs.deny
ファイルに定義したプログラムは実行されません。
ホワイトリストを定義するには、job
.allow ファイル
を作成します。