第24章 システムタスクの自動化
Red Hat Enterprise Linux は、タスク (ジョブ とも呼ばれます) を自動的に実行するように設定できます。
- 指定した時間に定期的に実行するには cron を使用します。「cron を使用した繰り返しジョブのスケジュール設定」 を参照してください。
- 特定の日に非同期的に実行するには、anacron を使用します。「Anacron を使用した繰り返しの非同期ジョブのスケジュール設定」 を参照してください。
- 特定の時間に 1 回実行するには at を使用します。「at を使用した特定の時間にジョブを実行するスケジュールの設定」 を参照してください。
- システムの負荷平均が指定した値を下回ったときに 1 回実行するには batch を使用します。「batch を使用した System Load Drop で実行するジョブのスケジュール設定」 を参照してください。
- 次回のブート時に 1 回実行するときは、「systemd ユニットファイルを使用した次回ブート時のジョブの実行スケジュール」 を参照してください。
本章では、これらのタスクの実行方法を説明します。
24.1. cron を使用した繰り返しジョブのスケジュール設定
cron
は、タスク (別名ジョブ) を定期的に実行するためにスケジュールを設定するサービスです。cron
のジョブは、設定した時間にシステムが稼働している場合のみ実行されます。システムの起動時まで実行を延期して、システムが稼動していない場合にジョブが消失しないようにするスケジューの設定の方法は、「at を使用した特定の時間にジョブを実行するスケジュールの設定」 を参照してください。
ユーザーは、cron テーブルファイル (crontab
ファイルとも呼ばれます) で cron ジョブを指定します。その後、これらのファイルは crond
サービスが読み取り、ジョブを実行します。
24.1.1. cron ジョブの前提条件
cron
ジョブのスケジュール設定を行う前に、以下を行います。
cronie パッケージをインストールします。
~]# yum install cronie
crond
サービスはインストール時に有効になっており、ブート時に自動的に開始するよう設定されています。サービスを無効にしている場合は有効にしてください。~]# systemctl enable crond.service
現在のセッションで
crond
サービスを開始します。~]# systemctl start crond.service
(オプション) cron を設定します。たとえば、以下を変更できます。
- ジョブの実行時に使用するシェル
-
PATH
環境変数 ジョブが E メールを送信する場合はメールアドレス
cron
の設定に関する詳細は、crontab(5) man ページを参照してください。
24.1.2. cron ジョブのスケジュール設定
root ユーザーとしてジョブをスケジュール設定する
root
ユーザーは /etc/crontab
にある cron テーブルを使用しますが、/etc/cron.d/
に cron テーブルファイルを作成することを推奨します。root
としてジョブをスケジュール設定するときは、この方法を使用します。
以下を選択します。
-
ジョブを実行する時刻 (分)。たとえば、10 分間隔で指定する場合は
0,10,20,30,40,50
または0/10
を使用します。 -
ジョブを実行する時刻 (時)。たとえば、17:00 から 20:59 までと指定する場合は
17-20
を使用します。 -
ジョブを実行する日。たとえば、15 日と指定する場合は
15
を使用します。 -
ジョブを実行する月。たとえば、夏季の月を指定する場合は
Jun,Jul,Aug
または6,7,8
を使用します。 ジョブを実行する曜日。たとえば、曜日と無関係にジョブを実行する場合は
*
を使用します。選択した値を時間指定と組み合せます。上記の例をこの時間指定に適用すると、以下のようになります。
0,10,20,30,40,50 17-20 15 Jun,Jul,Aug *
-
ジョブを実行する時刻 (分)。たとえば、10 分間隔で指定する場合は
-
ユーザーを指定します。ジョブは、このユーザーが実行したように実行されます。たとえば、
root
を使用します。 -
実行するコマンドを指定します。たとえば、
/usr/local/bin/my-script.sh
を使用します。 上記の指定を 1 行にまとめると、以下のようになります。
0,10,20,30,40,50 17-20 15 Jun,Jul,Aug * root /usr/local/bin/my-script.sh
-
完成した行を
/etc/crontab
に追加するか、代わりに/etc/cron.d/
に cron テーブルファイルを作成し、この行を追加します。後者が推奨されます。
これでジョブはスケジュールされたとおりに実行されます。
ジョブの指定方法に関する詳細は、crontab(5) man ページを参照してください。基本的情報は /etc/crontab
ファイルの冒頭部分を参照してください。
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 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 # | | | | | # * * * * * user-name command to be executed
root 以外のユーザーとしてジョブをスケジュール設定する
非 root ユーザーは、crontab ユーティリティーを使用して cron ジョブを設定します。このジョブは、このユーザーが実行したように実行されます。
cron ジョブを特定のユーザーとして作成するには、以下を使用します。
ユーザーのシェルから以下を実行します。
[bob@localhost ~]$
crontab -e
これにより、
VISUAL
またはEDITOR
環境変数により指定したエディターを使用して、ユーザーが自分でcrontab
ファイルを編集できます。「root ユーザーとしてジョブをスケジュール設定する」 にある方法と同じ方法でジョブを指定します。たとえば、以下を追加する代わりに、
0,10,20,30,40,50 17-20 15 Jun,Jul,Aug * bob /home/bob/bin/script.sh
以下を追加します。
0,10,20,30,40,50 17-20 15 Jun,Jul,Aug * /home/bob/bin/script.sh
- ファイルを保存して、エディターを終了します。
(オプション) 新しいジョブを確認するときは、以下を実行し、現在のユーザーの crontab ファイルの内容を表示します。
[bob@localhost ~]$
crontab -l
@daily /home/bob/bin/script.sh
ジョブの時間、日、週、月ごとのスケジュール設定
ジョブを時間、日、週、または月ごとにスケジュールするには、以下を実行します。
- ジョブに実行させたいアクションをシェルスクリプトに入力します。
シェルスクリプトを以下のディレクトリーのうちの 1 つに入力します。
-
/etc/cron.hourly/
-
/etc/cron.daily/
-
/etc/cron.weekly/
-
/etc/cron.monthly/
-
以後、ユーザーのスクリプトが実行されます。crond
サービスが /etc/cron.hourly
、/etc/cron.daily
、/etc/cron.weekly
、および /etc/cron.monthly
ディレクトリーにあるスクリプトを、対応する時間に自動的に実行します。