Solaris のシステム管理 (上級編)

1 つのシステムタスクのスケジューリング (at)

以降の節では、at コマンドを使用して以下のタスクを実行する方法を説明します。

デフォルトでは、ユーザーはそれぞれ自分の at ジョブファイルを作成、表示、または削除できます。root または他のユーザーの at ファイルにアクセスするには、スーパーユーザーの権限が必要です。

at ジョブの実行を設定すると、ジョブ識別番号と .a 拡張子が与えられます。これがジョブのファイル名および待ち行列番号になります。

at コマンドの説明

at ジョブファイルを書き込むには、以下の手順を実行します。

  1. コマンド実行時刻を指定して at ユーティリティーを起動します。

  2. あとで実行させるコマンドまたはスクリプトを入力します。


    注 –

    このコマンドまたはスクリプトからの出力が重要な場合は、後で調べることができるように、出力内容を必ずファイルに書き込むようにしてください。


たとえば、次の at ジョブは、7 月 31 日の真夜中に smith ユーザーアカウントからコアファイルを削除します。


$ 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 2004

at コマンドの使用制御

特定のユーザーだけが自分の at ジョブに関する待ち行列情報を作成、削除、または表示できるように、at コマンドの使用を制御するファイルを設定できます。at コマンドの使用を制御するファイルは /etc/cron.d/at.deny です。ここにはユーザー名が列挙 (1 行に 1 人) されています。このファイルに列挙されているユーザーは、at コマンドを使用できません。

Solaris ソフトウェアのインストール時に作成される at.deny ファイルには、次のユーザー名が含まれます。


daemon
bin
smtp
nuucp
listen
nobody
noaccess

スーパーユーザーの特権があれば、at.deny ファイルを編集して、at の使用を制限したい他のユーザー名を追加できます。

Procedureat ジョブを作成する方法

  1. at ユーティリティーを起動して、ジョブを実行したい時間を指定します。


    $ at [-m] time [date] 
    -m

    ジョブ終了後にメールを送る

    time

    ジョブをスケジュールしたい時刻を指定する。24 時間制を使用しない場合は、am または pm を追加する。使用できるキーワードは、 midnightnoonnow。分単位の値の指定は省略可能

    date

    月または曜日の英語名の最初の 3 文字以上、またはキーワード today または tomorrow を指定する

  2. at プロンプトに、実行したいコマンドまたはスクリプトを 1 行に 1 つずつ入力します。

    各行の終わりで Return キーを押すことにより、複数のコマンドを入力できます。

  3. at ユーティリティーを終了し、Control-D キーを押して at ジョブを保存します。

    作成できた at ジョブは待ち行列番号を割り当てられ、それがそのジョブのファイル名にもなります。この番号は at ユーティリティーの終了時に表示されます。


例 8–7 at ジョブを作成する

次の例は、ユーザー jones が自分のバックアップファイルを 7:30 pm に削除するように作成した at ジョブを示しています。彼女は、ジョブの終了後にメールメッセージを受け取れるように -m オプションを使用しています。


$ at -m 1930
at> rm /home/jones/*.backup
at> Press Control-D
job 897355800.a at Thu Jul  12 19:30:00 2004

彼女は次のメールメッセージを受け取りました。このメッセージは 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

Procedureat 待ち行列を表示する方法

  1. at 待ち行列で実行を待っているジョブを確認するには、次に示すように atq コマンドを使用します。


    $ atq
    

    このコマンドは、その使用者が作成した at ジョブに関する状態情報を表示します。

Procedureat ジョブを確認する方法

  1. at ジョブが作成できたかどうかを確認するには、atq コマンドを使用します。次の例の atq コマンドは、jonesat ジョブが待ち行列に入っていることを確認しています。


    $ atq
    Rank	  Execution Date     Owner     Job         Queue   Job Name
      1st   Jul 12, 2004 19:30   jones  897355800.a     a     stdin
      2nd   Jul 14, 2004 23:45   jones  897543900.a     a     stdin
      3rd   Jul 17, 2004 04:00   jones  897732000.a     a     stdin

Procedureat ジョブを表示する方法

  1. 自分の at ジョブの実行時刻に関する情報を表示するには、at -l コマンドを使用します。


    $ at -l [job-id]

    -l job-id オプションで、状態を表示したいジョブの識別番号を指定します。


例 8–8 at ジョブを表示する

次の例は、at -l コマンドからの出力を示しています。このコマンドは、特定のユーザーが依頼したすべてのジョブに関する状態を表示します。


$ at -l
897543900.a	Sat Jul 14 23:45:00 2004
897355800.a	Thu Jul 12 19:30:00 2004
897732000.a	Tue Jul 17 04:00:00 2004

次の例は、at -l コマンドに 1 つのジョブを指定して表示された出力を示しています。


$ at -l 897732000.a
897732000.a		Tue Jul 17 04:00:00 2004

Procedureat ジョブを削除する方法

始める前に

root または他のユーザーの at ジョブを削除するには、スーパーユーザーになるか、同等の役割になります。役割には、認証と特権コマンドが含まれます。

自分の at ジョブを削除するには、スーパーユーザーまたは同等の役割になる必要はありません。

  1. 次のように入力して、at ジョブが実行される前に待ち行列から削除します。


    $ at -r [job-id]

    -r job-id オプションで、削除したいジョブの識別番号を指定します。

  2. at -l (または atq) コマンドを使用して、at ジョブが削除されていることを確認します。

    at -l コマンドは、at 待ち行列に残っているジョブを表示します。識別番号を指定したジョブは、このリストに表示されないはずです。


    $ at -l [job-id]

例 8–9 at ジョブを削除する

次の例では、ユーザーが 7 月 17 日の午前 4 時に実行されるようにスケジュールした at ジョブを削除しようとしています。まず、このユーザーは at 待ち行列を表示してそのジョブの識別番号を探します。次に、そのジョブを at 待ち行列から削除します。最後に、at 待ち行列をもう一度表示して上記のジョブが削除されていることを確認します。


$ at -l
897543900.a	Sat Jul 14 23:45:00 2003
897355800.a	Thu Jul 12 19:30:00 2003
897732000.a	Tue Jul 17 04:00:00 2003
$ at -r 897732000.a
$ at -l 897732000.a
at: 858142000.a: No such file or directory

Procedureat コマンドの使用を拒否する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. /etc/cron.d/at.deny ファイルを編集して、at コマンドを使用させないようにするユーザー名を 1 行に 1 つずつ追加します。


    daemon
    bin
    smtp
    nuucp
    listen
    nobody
    noaccess
    username1
    username2
    username3
    .
    .
    .

例 8–10 at の使用を拒否する

次の例は、ユーザー smithjonesat コマンドを使用できないように編集された at.deny ファイルです。


$ cat at.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess
jones
smith

Procedureat コマンドの使用の拒否を確認する方法

  1. 特定のユーザー名が正しく /etc/cron.d/at.denyファイルに追加されているかどうかを確認するには、そのユーザー名でログインして、at -l コマンドを使用します。ユーザー smithat コマンドにアクセスできない場合、次のメッセージが表示されます。


    # su smith
    Password:
    $ at -l
    at: you are not authorized to use at.  Sorry.

    同様に、そのユーザーが at ジョブの実行を依頼しようとした場合は、次のメッセージが表示されます。


    $ at 2:30pm
    at: you are not authorized to use at.  Sorry.

    このメッセージによって、そのユーザーが at.deny ファイルに含まれていることが確認されます。

    at コマンドを使用できる場合、at -l コマンドは何も返しません。