Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第27章 システムタスクの自動化

タスクは、ジョブ としても知られており、指定期間、またはシステムの負荷平均が 0.8 を下回る場合に自動的に実行するように設定できます。
Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux は、システムの更新を維持するために重要なシステムタスクを実行するように事前設定されています。たとえば、locate コマンドで使用される s locate データベースが毎日更新されます。システム管理者は、自動化されたタスクを使用して定期的なバックアップの実行、システムの監視、カスタムスクリプトの実行などを実行できます。
Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux には、cronanacron、および 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-anacroncronie-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 で次のコマンドを実行します。
 service crond start 
起動時にサービスが自動的に起動するよう設定するには、以下のコマンドを使用します。
 chkconfig crond on 
このコマンドは、ランレベル 2、3、4、および 5 でサービスを有効にします。または、「サービスの有効化および無効化」 の説明に従って Service Configuration ユーティリティーを使用できます。

27.1.2.2. cron サービスの停止

crond サービスを停止するには、rootで次のコマンドを実行します。
 service crond stop 
ブート時のサービスの起動を無効にするには、以下のコマンドを使用します。
 chkconfig crond off 
このコマンドは、すべてのランレベルでサービスを無効にします。または、「サービスの有効化および無効化」 の説明に従って Service Configuration ユーティリティーを使用できます。

27.1.2.3. cron サービスの再起動

crond サービスを再起動するには、シェルプロンプトで以下を入力します。
 service crond 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_DELAY12 に設定すると、特定の分析内のジョブごとに、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 行には、SHELLPATH、および MAILTOanacrontab ファイルと同じ変数定義が含まれます。これらの変数に関する詳細は、「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 ファイル を作成します。
jobs.deny および jobs.allow の原則は、「cron へのアクセスの制御」 セクションで説明されている cron.deny および cron.allow の原則と同じです。