以降の節では、at コマンドを使用して特定の時刻にジョブ (コマンドとスクリプト) をスケジュールする方法、これらのジョブを表示して削除する方法、at コマンドの使用を制御する方法について説明します。
デフォルトでは、ユーザーはそれぞれ自分の at ジョブファイルを作成、表示、または削除できます。root または他のユーザーの at ファイルにアクセスするには、スーパーユーザーの権限が必要です。
at ジョブの実行を指定すると、at ジョブにジョブ識別番号と .a 拡張子が与えられ、それがジョブのファイル名になります。
コマンド実行時刻を指定して at ユーティリティを起動します。
後で実行させるコマンドまたはスクリプトを入力します。
このコマンドまたはスクリプトからの出力が重要な場合は、後で調べることができるように、出力内容を必ずファイルに書き込むようにしてください。
たとえば、次の at ジョブは、7 月 31 日の真夜中に smith のユーザーアカウントから core ファイルを削除します。
$ at 11:45pm July 31 at> rm /home/smith/*core* at> Press Control-d commands will be executed using /bin/csh job 933486300.a at Tue Jul 31 23:45:00 2001 |
特定のユーザーだけがそれぞれの at ジョブに関する待ち行列情報を作成、削除、または表示できるように、at コマンドの使用を制御するファイルを設定できます。at コマンドの使用を制御するファイルは /etc/cron.d/at.deny です。ここにはユーザー名が列挙 (1 行に 1 人) されています。このファイルに列挙されているユーザーは、at コマンドを使用できません。
Solaris ソフトウェアのインストール時に作成される at.deny ファイルには、次のユーザー名が含まれます。
daemon bin smtp nuucp listen nobody noaccess |
スーパーユーザーの特権があれば、at.deny ファイルを編集して、at の使用を制限したい他のユーザー名を追加できます。
at ユーティリティを起動して、ジョブを実行したい時間を指定します。
$ at [-m] time [date] |
-m |
ジョブ終了後にメールを送る |
time |
ジョブをスケジュールしたい時刻の時単位の値。24 時間制を使用しない場合は、am または pm を追加する。使用できるキーワードは、 midnight、noon、now。 分単位の値の指定は省略可能 |
date |
月または曜日の名前の最初の 3 英字以上、またはキーワード today または tomorrow |
at プロンプトに、実行したいコマンドまたはスクリプトを 1 行に 1 つずつ入力します。
各行の終わりで Return キーを押すことにより、複数のコマンドを入力できます。
at ユーティリティを終了し、Control-D キーを押して at ジョブを保存します。
作成できた at ジョブは待ち行列番号を割り当てられ、それがそのジョブのファイル名にもなります。この番号は at ユーティリティの終了時に表示されます。
次の例は、ユーザー jones が彼女のバックアップファイルを 7:30 pm に削除するように作成した at ジョブを示しています。彼女は、ジョブの終了後にメールメッセージを受け取れるように、-m オプションを使用しています。
$ at -m 1930 at> rm /home/jones/*.backup at> Control-D を押す job 897355800.a at Thu Jul 12 19:30:00 2001 |
jones は次のメールメッセージを受け取りました。このメッセージは at ジョブが終了したことを確認しています。
Your "at" job "rm /home/jones/*.backup" completed. |
次の例は、jones が土曜の午前 4 時の大規模な at ジョブをどのようにスケジュールしたのかを示しています。 ジョブの出力先は big.file です。
$ at 4 am Saturday at> sort -r /usr/dict/words> /export/home/jones/big.file |
at 待ち行列で実行を待っているジョブを確認するには、次に示すように atq コマンドを使用します。このコマンドは、その使用者が作成した at ジョブに関する状態情報を表示します。
$ atq |
at ジョブが作成できたかどうかを確認するには、atq コマンドを使用します。次の atq コマンドは、jones に属する at ジョブが待ち行列に入っていることを確認しています。
$ atq Rank Execution Date Owner Job Queue Job Name 1st Jul 12, 2001 19:30 jones 897355800.a a stdin 2nd Jul 14, 2001 23:45 jones 897543900.a a stdin 3rd Jul 17, 2001 04:00 jones 897732000.a a stdin |
自分の at ジョブの実行時刻に関する情報を表示するには、次のように at -l コマンドを使用します。
$ at -l [job-id] |
-l job-id オプションで、状態を表示したいジョブの識別番号を指定します。
次の例は、at -l コマンドからの出力を示しています。このコマンドは、特定のユーザーが依頼したすべてのジョブに関する状態を表示します。
$ at -l 897543900.a Sat Jul 14 23:45:00 2001 897355800.a Thu Jul 12 19:30:00 2001 897732000.a Tue Jul 17 04:00:00 2001 |
次の例は、at -l コマンドに 1 つのジョブを指定して表示された出力を示しています。
$ at -l 897732000.a 897732000.a Tue Jul 17 04:00:00 2001 |
次のように入力して、at ジョブが実行される前に待ち行列から削除します。
$ at -r [job-id] |
-r job-id オプションで、削除したいジョブの識別番号を指定します。
at -l (または atq) コマンドを使用して、at ジョブが削除されていることを確認します。
at -l コマンドは、at 待ち行列に残っているジョブを表示します。識別番号を指定したジョブは、このリストに表示されないはずです。
$ at -l [job-id] |
次の例では、ユーザーが 7 月 17 日の午前 4 時に実行されるようにスケジュールした at ジョブを削除しようとしています。まず、このユーザーは at 待ち行列を表示してそのジョブの識別番号を探します。次に、そのジョブを at 待ち行列から削除します。最後に、at 待ち行列をもう一度表示して上記のジョブが削除されていることを確認します。
$ at -l 897543900.a Sat Jul 14 23:45:00 2001 897355800.a Thu Jul 12 19:30:00 2001 897732000.a Tue Jul 17 04:00:00 2001 $ at -r 897732000.a $ at -l 897732000.a at: 858142000.a: No such file or directory |
スーパーユーザーになります。
/etc/cron.d/at.deny ファイルを開きます。at コマンドを使用させないようにするユーザー名を 1 行に 1 つずつ追加または削除します。
daemon bin smtp nuucp listen nobody noaccess username1 username2 username3 . . . |
次は、ユーザー smith と jones が at コマンドを使用できないように編集された at.deny ファイルの例です。
$ cat at.deny daemon bin smtp nuucp listen nobody noaccess jones smith |
特定のユーザー名が正しく /etc/cron.d/at.deny に追加されているかどうかを確認するには、そのユーザー名でログインして、at -l コマンドを使用します。そのユーザーが at コマンドを使用できない場合は、次のメッセージが表示されます。
# su smith Password: $ at -l at: 使用許可されていません |
同様に、そのユーザーが at ジョブの実行を依頼しようとした場合は、次のメッセージが表示されます。
$ at 2:30pm at: 使用許可されていません |
このメッセージによって、そのユーザーが at.deny ファイルに含まれていることが確認されます。
at コマンドを使用できる場合、at -l コマンドは何も返しません。