Show Table of Contents
第23章 システムタスクの自動化
Red Hat Enterprise Linux は、タスク (ジョブ とも呼ばれます) を自動的に実行するよう設定できます。
- 指定した時間に定期的に実行するには cron を使います。「Cron を使用した繰り返しジョブのスケジュール設定」 をご覧ください。
- 特定の日に非同期的に実行するには anacron を使います。「Anacron を使用した繰り返しの非同期ジョブのスケジュール設定」 をご覧ください。
- 特定の時間に 1 回実行するには at を使います。「at を使用した特定の時間にジョブを実行するスケジュール設定」 をご覧ください。
- システムの負荷平均が指定した値を下回ったときに 1 回実行するには batch を使います。「batch を使用した System Load Drop で実行するジョブのスケジュール設定」 をご覧ください。
- 次回のブート時に 1 回実行するときは、「systemd ユニットファイルを使用した次回ブート時のジョブの実行スケジュール」 をご覧ください。
本章では、これらのタスクの実行方法について説明します。
23.1. Cron を使用した繰り返しジョブのスケジュール設定
Cron は、タスク (別名ジョブ) を定期的に実行するためにスケジュールを設定するサービスです。cron のジョブは、設定した時間にシステムが稼働している場合のみ実行されます。システムの起動時まで実行を延期して、システムが稼動していない場合にジョブが「消失」しないようにするスケジューの設定の方法については、「at を使用した特定の時間にジョブを実行するスケジュール設定」 を参照してください。
ユーザーは、cron テーブルファイル (
crontab ファイルとも呼ばれます) で cron ジョブを指定します。その後、これらのファイルは crond サービスが読み取って、ジョブを実行します。
23.1.1. Cron ジョブの前提条件
cron ジョブのスケジュール設定を行う前に。
- cronie パッケージをインストールします。
~]#
yum install cronie crondサービスはインストール時に有効化されており、ブート時に自動的に開始するよう設定されています。サービスを無効にしている場合は有効にしてください。~]#
systemctl enable crond.service- 現在のセッションで
crondサービスを開始します。~]#
systemctl start crond.service - (オプション) cron を設定します。たとえば、以下を変更できます。
- ジョブの実行時に使用するシェル
PATH環境変数- ジョブがEメールを送信する場合はメールアドレス
cronの設定に関する詳細は、crontab(5) のマニュアルページをご覧ください。
23.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 * - ユーザーを指定します。ジョブは、このユーザーが実行したように実行されます。たとえば、
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) マニュアルページをご覧ください。基本的情報は
/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ファイルの編集が開始されます。 - Scheduling a cron Job as root user にある方法と同じ方法でジョブを指定します。ただしユーザー名のフィールドは省略します。たとえば、以下を追加する代わりに、
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 ディレクトリにあるスクリプトを、対応する時間に自動的に実行します。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.