24.3. at を使用した特定の時間にジョブを実行するスケジュールの設定
1 回限りのタスク (別名ジョブ) を指定した時間に 1 回実行するようスケジュール設定するときは、at
ユーティリティーを使用します。
ユーザーは、at
ユーティリティーを使用してat ジョブを指定します。このジョブはその後 atd
サービスにより実行されます。
24.3.1. at ジョブの前提条件
at
ジョブのスケジュール設定を行う前に、以下を行います。
at パッケージをインストールします。
~]# yum install at
atd
サービスはインストール時に有効になっており、ブート時に自動的に開始するように設定されています。サービスを無効にしている場合は有効にしてください。~]# systemctl enable atd.service
現在のセッションで
atd
サービスを開始します。~]# systemctl start atd.service
24.3.2. at ジョブのスケジュール設定
ジョブは常に複数のユーザーにより実行されます。希望するユーザーとしてログインし、以下を実行します。
~]# at time
time を時間指定に置き換えます。
時間の指定に関する詳細は、at(1) man ページと
/usr/share/doc/at/timespec
ファイルを参照してください。例24.1 at の時間指定
ジョブを 15:00 に実行するには、以下を実行します。
~]# at 15:00
指定した時間を過ぎると、そのジョブは翌日の同じ時間に実行されます。
ジョブを 2017 年 8 月 20 日に実行するには、以下を実行します。
~]# at August 20 2017
または
~]# at 082017
ジョブを 5 日後に実行するには、以下を実行します。
~]# now + 5 days
at>
プロンプトが表示されたら、以下のコマンドを入力して実行し、Enter を押します。~]# at 15:00 at> sh /usr/local/bin/my-script.sh at>
実行したいすべてのコマンドにこの手順を繰り返します。
注記at>
プロンプトに、使用されるシェルが表示されます。warning: commands will be executed using /bin/sh
at ユーティリティーは、ユーザーの SHELL 環境変数にあるシェルのセット、ユーザーのログインシェル、または
/bin/sh
の、いずれか最初に発見されたものを使用します。- 空の行で Ctrl+D キーを押し、ジョブの指定を完了します。
コマンドセットやスクリプトが標準出力に情報を表示しようとする場合、その出力はユーザーにメールで送信されます。
保留中のジョブの表示
保留中のジョブリストを表示するには、atq
コマンドを使用します。
~]# atq 26 Thu Feb 23 15:00:00 2017 a root 28 Thu Feb 24 17:30:00 2017 a root
各ジョブは、個別の行に以下のフォーマットで表示されます。
job_number scheduled_date scheduled_hour job_class user_name
job_queue
カラムは、ジョブが at
または batch
のいずれのジョブであるかを指定します。a
は at
を表します。b
は batch
を表します。
非 root ユーザーが閲覧できるのは、自分のジョブのみです。root ユーザーは、すべてのユーザーのジョブを閲覧できます。
スケジュール設定したジョブの削除
スケジュール設定したジョブを削除するには、以下を行います。
atq
コマンドを使用して、保留中のジョブをリスト表示します。~]# atq 26 Thu Feb 23 15:00:00 2017 a root 28 Thu Feb 24 17:30:00 2017 a root
- スケジュールを設定した時間とユーザーを使用しえ、削除するジョブを検索します。
ジョブを番号で指定し、
atrm
コマンドを実行します。~]# atrm 26
24.3.2.1. at と batch へのアクセスの制御
特定ユーザーによる at
と batch
コマンドへのアクセスを制限できます。次のルールに従って、ユーザー名を /etc/at.allow
または /etc/at.deny
に入力してください。
- 両方のアクセス制御ファイルは、同じフォーマットを使用します。ユーザー名は、各行に 1 人ずつです。
- いずれのファイルでも、空白は許可されません。
-
at.allow
ファイルが存在する場合は、ファイルに記載されているユーザーのみがat
またはbatch
を使用でき、at.deny
ファイルは無視されます。 -
at.allow
がない場合は、at.deny
に記載されているユーザーはat
またはbatch
を使用できません。 -
root
ユーザーはアクセス制御ファイルの影響を受けず、常にat
コマンドおよびbatch
コマンドを実行できます。
アクセス制御ファイルを変更した場合でも、at
デーモン (atd
) を再起動する必要はありません。アクセス制御ファイルは、ユーザーが at
または batch
のコマンドの実行を試みるたびに読み込まれます。