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

第 8 章 システムタスクのスケジュール設定 (手順)

この章では、crontab コマンドおよび at コマンドを使用して、定型作業や 1 度限りのシステムタスクをスケジュール設定する方法を説明します。

また、次のファイルを使用して上記のコマンドの使用を制御する方法も説明します。

システムタスクのスケジュール設定に関する手順については、以下を参照してください。

crontab ファイルの作成と編集 (作業マップ)

作業 

説明 

参照先 

crontab ファイルを作成または編集する

crontab -e コマンドを使用し、crontab ファイルを作成または編集する

crontab ファイルを作成または編集する方法」

crontab ファイルが存在するかどうかを確認する

ls -l コマンドを使用し、/var/spool/cron/crontabs ファイルの内容を確認する

crontab ファイルを確認する方法」

crontabファイルを表示する

ls -l コマンドを使用し、 crontab ファイルを表示する

crontab ファイルを表示する方法」

crontab ファイルを削除する

crontab ファイルには、アクセス制限がかけられている。したがって、crontab ファイルを削除するには、rm ではなく crontab -r コマンドを使用する

crontab ファイルを削除する方法」

crontab の使用を拒否する

ユーザーによる crontab コマンドの使用を拒否するには、/etc/cron.d/cron.deny ファイルを編集してユーザー名を追加する

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

crontab の使用を特定のユーザーに限定する

crontab コマンドのユーザーの使用を許可するには、/etc/cron.d/cron.allow ファイルにユーザー名を追加する

crontab コマンドの使用を特定のユーザーに限定する方法」

システムタスクを自動的に実行する方法

多数のシステムタスクを自動的に実行するよう設定できます。これらのタスクの中には、定期的な実行が必要になる作業があります。また、夜間や週末などの就業時間外に 1 回だけ実行する作業もあります。

この節では、crontabat という 2 つのコマンドについて概説します。これらのコマンドを使用すると、定型作業をスケジュールして、自動的に実行することができます。crontab コマンドは、繰り返し実行するコマンドをスケジュールします。at コマンドは、1 回だけ実行するタスクをスケジュールします。

次の表は、crontabat、およびこれらのコマンドの使用を制御できるファイルをまとめたものです。

表 8–1 コマンドの要約: システムタスクのスケジューリング

コマンド 

スケジューリングの対象 

ファイルの格納場所 

制御ファイル 

crontab

一定間隔で実行する複数のシステムタスク 

/var/spool/cron/crontabs

/etc/cron.d/cron.allow および /etc/cron.d/cron.deny

at

1 つのシステムタスク  

/var/spool/cron/atjobs

/etc/cron.d/at.deny

Solaris 管理コンソールのスケジュールされたジョブツールを使用して、定型作業をスケジュールすることもできます。Solaris 管理コンソールの使用と起動の方法については、『Solaris のシステム管理 (基本編)』の第 2 章「Solaris 管理コンソールの操作 (手順)」を参照してください。

繰り返されるジョブのスケジューリング (crontab)

定型的なシステム管理タスクは、crontab コマンドを使用して、毎日、毎週、または毎月それぞれ 1 回ずつ実行するようにスケジュールできます。

毎日 1 回の crontab システム管理作業には、次のようなものがあります。

毎週 1 回の crontab システム管理作業には、次のようなものがあります。

毎月 1 回の crontab システム管理作業には、次のようなものがあります。

上記に加えて、連絡事項の通知やバックアップファイルの削除などの定型的システムタスクを実行するように、crontab コマンドをスケジュールすることもできます。

crontab ジョブをスケジュールする手順については、crontab ファイルを作成または編集する方法」を参照してください。

1 つのジョブのスケジューリング (at)

at コマンドを使用すると、1 つのジョブをあとで実行するようにスケジュールできます。ジョブは 1 つのコマンドやスクリプトで構成されます。

crontab と同様に、at コマンドを使用すると定型作業の自動実行をスケジュールできます。しかし、crontab ファイルとは異なり、 at ファイルはタスクを 1 回だけ実行します。その後はディレクトリから削除されます。したがって、at コマンドが役立つのは、単純なコマンドまたはスクリプトを実行して、別ファイルに書き出した出力をあとから調べるような場合です。

at ジョブの実行を指定するには、コマンドを入力してから、at コマンド構文に従ってオプションで実行時刻を指定してください。at ジョブの実行方法については、at コマンドの説明」を参照してください。

at コマンドは、入力されたコマンドまたはスクリプトを、現在の環境変数のコピーと一緒に /var/spool/cron/atjobs ディレクトリに格納します。作成された at ジョブには、ファイル名として、at 待ち行列内での位置を指定する長い数値と .a 拡張子からなる、たとえば 793962000.a のような文字列が与えられます。

cron デーモンは、起動時に at ジョブをチェックし、新しく実行されるジョブを待機します。cron デーモンが at ジョブを実行すると、atjobs ディレクトリから at ジョブのファイルが削除されます。詳細は、at(1) のマニュアルページを参照してください。

at ジョブをスケジュールする手順については、at ジョブを作成する方法」を参照してください。

繰り返されるシステムタスクのスケジューリング (cron)

以降の各項で、crontab ファイルをどのように作成、編集、表示、削除するか、さらに、それらのファイルの使用をどのように制御するかを説明します。

crontab ファイルの内容

cron デーモンは、各 crontab ファイル内にあるコマンドに従ってシステムタスクをスケジュールします。crontab ファイルには、それぞれ一定間隔で実行されるコマンドが 1 行に 1 つずつ入っています。各行の先頭は cron デーモンが各コマンドを実行する日時情報です。

たとえば、SunOS ソフトウェアのインストール時に root という名前の crontab ファイルが提供されます。このファイルの内容には、次のコマンド行が含まれています。


10 3 * * * /usr/sbin/logadm (1)
15 3 * * 0 /usr/lib/fs/nfs/nfsfind (2)
1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 (3)
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean (4)

これらのコマンド行の出力について次に説明します。

crontab ファイル内のコマンド行の構文の詳細は、crontab ファイルエントリの構文」を参照してください。

crontab ファイルは /var/spool/cron/crontabs ディレクトリに保存されます。SunOS ソフトウェアのインストール時には、root 以外にもいくつかの crontab ファイルが提供されます。次の表を参照してください。

表 8–2 デフォルトの crontab ファイル

crontab ファイル

機能 

adm

アカウンティング 

lp

印刷 

root

一般的なシステム機能とファイルシステムの整理 

sys

パフォーマンスデータの収集 

uucp

一般的な uucp の整理

デフォルトの crontab ファイルの他に、ユーザーは crontab ファイルを作成してユーザー自身のシステムタスクをスケジュールできます。その他の crontab ファイルは、作成したユーザーのアカウントに基づいて、bobmarysmithjones などのように命名されます。

root またはほかのユーザーの crontab ファイルを使用するには、スーパーユーザーの特権が必要です。

crontab ファイルの作成、編集、表示、削除の手順については、以降の節で説明します。

cron デーモンのスケジューリング管理

cron デーモンは、crontab コマンドの自動スケジューリングを管理します。cron デーモンは、/var/spool/cron/crontab ディレクトリに crontab ファイルがあるかどうかをチェックします。

cron デーモンは、起動時に次のタスクを実行します。

ほとんど同様に、cron デーモンは at ファイルのスケジューリングを制御します。これらのファイルは /var/spool/cron/atjobs ディレクトリに格納されています。 cron デーモンは、実行された at ジョブに関する crontab コマンドからの通知も待機します。

crontab ファイルエントリの構文

crontab ファイルは、1 行に 1 つのコマンドが入っており、各コマンド行の最初の 5 つのフィールドでは、コマンドが実行される時刻を指定します。これら 5 つのフィールドを、次の表で説明します。これらのフィールドはスペース (空白) で区切られます。

表 8–3 crontab 時刻フィールドの値

時刻フィールド 

値 

分  

0-59 

時 

0-23 

日 

1-31 

月 

1-12 

曜日 

0 - 6 (0 は日曜日) 

次に、crontab 時刻フィールドで特殊文字を使用する際のガイドラインを示します。

たとえば、次の crontab コマンドエントリは、毎月 1 日と 15 日の午後 4 時に、ユーザーのコンソールウィンドウに注意を促すメッセージを表示します。


0 16 1,15 * * echo Timesheets Due > /dev/console

crontab ファイル内の各コマンドは、長くても 1 行内に入れる必要があります。crontab ファイルは余分なキャリッジリターンを認識しません。crontab のエントリとコマンドオプションの詳細は、crontab(1) のマニュアルページを参照してください。

crontab ファイルの作成と編集

crontab ファイルを作成するもっとも簡単な方法は、crontab -e コマンドを使用することです。このコマンドは、システム環境で指定されたテキストエディタを起動します。システム環境のデフォルトのエディタは、EDITOR 環境変数で定義されます。この環境変数が設定されていない場合は、crontab コマンドはデフォルトのエディタ ed を使用します。あらかじめ、使い慣れたエディタを選択しておく必要があります。

次の例は、エディタが定義されているかどうかを確認する方法と、viをデフォルトのエディタとして設定する方法を示しています。


$ which $EDITOR
$ 
$ EDITOR=vi
$ export EDITOR

crontab ファイルを作成すると、自動的に /var/spool/cron/crontabs ディレクトリ内に格納され、作成者のユーザー名で命名されます。スーパーユーザー特権があれば、他のユーザーや rootcrontab ファイルを作成または編集できます。

Procedurecrontab ファイルを作成または編集する方法

始める前に

root または他のユーザーに属する crontab ファイルを作成または編集する場合は、スーパーユーザーになるか、同等の役割になります。役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

自分の crontab ファイルを編集する場合は、スーパーユーザーになる必要はありません。

  1. 新しい crontab ファイルを作成するか、既存の crontab ファイルを編集します。


    $ crontab -e [username]

    username は、crontab ファイルを作成または編集するユーザーのアカウント名を指定します。自分の crontab ファイルを作成するにはスーパーユーザー特権は必要ありませんが、root または別のユーザーの crontab ファイルを作成したり編集したりするには、スーパーユーザー特権が必要です。


    注意 – 注意 –

    誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの中断文字を入力してください。この文字を入力すると、変更結果を保存せずに crontab コマンドを終了できます。この場合に変更結果を保存してファイルを終了すると、既存の crontab ファイルが空のファイルで上書きされます。


  2. コマンド行を crontab ファイルに追加します。

    crontab ファイルエントリの構文」 に記載されている構文に従ってください。crontab ファイルは、 /var/spool/cron/crontabs ディレクトリに保存されます。

  3. crontab ファイルの変更箇所を確認します。


    # crontab -l [username]

例 8–1 crontab ファイルを作成する

次の例は、他のユーザーのための crontab ファイルをどのように作成するかを示します。


# crontab -e jones

次のコマンドエントリを新しい crontab ファイルに追加すると、毎週日曜日の午前 1 時にユーザーのホームディレクトリからすべてのログファイルが自動的に削除されます。このコマンドエントリは出力先を変更しないので、出力先変更文字がコマンド行の *.log のあとに追加されます。このためコマンドが正しく実行されます。


# This command helps clean up user accounts.
1 0 * * 0 rm /home/jones/*.log > /dev/null 2>&1

Procedurecrontab ファイルを確認する方法

  1. 特定のユーザーの crontab ファイルがあるかどうかを確認するには、/var/spool/cron/crontabs ディレクトリで ls -l コマンドを使用します。たとえば、次の出力はユーザー jonessmithcrontab ファイルがあることを示しています。


    $ ls -l /var/spool/cron/crontabs
    -rw-r--r--  1 root     sys          190 Feb 26 16:23 adm
    -rw-------  1 root     staff        225 Mar  1  9:19 jones
    -rw-r--r--  1 root     root        1063 Feb 26 16:23 lp
    -rw-r--r--  1 root     sys          441 Feb 26 16:25 root
    -rw-------  1 root     staff         60 Mar  1  9:15 smith
    -rw-r--r--  1 root     sys          308 Feb 26 16:23 sys

    ユーザーの crontab ファイルの内容を確認するには、 crontab -l コマンドを使用します。crontab ファイルを表示する方法」を参照してください。

crontab ファイルの表示

crontab -l コマンドは、cat コマンドが他のファイルタイプの内容を表示するのとほぼ同様に、crontab ファイルの内容を表示します。このコマンドを使用するために、(crontab ファイルが入っている) /var/spool/cron/crontabs ディレクトリに移動する必要はありません。

デフォルトでは、crontab -l コマンドは自分自身の crontab ファイルを表示します。他のユーザーの crontab ファイルは、スーパーユーザーでなければ表示できません。

Procedurecrontab ファイルを表示する方法

始める前に

root または他のユーザーの crontab ファイルを表示するには、スーパーユーザーになるか、同等の役割になります。

自分の crontab ファイルを表示するには、スーパーユーザーまたは同等の役割になる必要はありません。

  1. 次のように入力して、crontab ファイルを表示します。


    $ crontab -l [username]

    username は、crontab ファイルを表示するユーザーのアカウント名を指定します。他のユーザーの crontab ファイルを表示するには、スーパーユーザー特権が必要です。


    注意 – 注意 –

    誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの中断文字を入力してください。この文字を入力すると、変更結果を保存せずに crontab コマンドを終了できます。この場合に変更結果を保存してファイルを終了すると、既存の crontab ファイルが空のファイルで上書きされます。



例 8–2 crontab ファイルを表示する

次の例は、crontab -l コマンドを使用してユーザーのデフォルトの crontab ファイルを表示する方法を示します。


$ crontab -l
13 13 * * * chmod g+w /home1/documents/*.book > /dev/null 2>&1


例 8–3 デフォルトの rootcrontab ファイルを表示する

次の例は、デフォルトの rootcrontab ファイルを表示する方法を示します。


$ suPassword:
Sun Microsystems Inc.   SunOS 5.10      s10_51  May 2004
# crontab -l
#ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
#
# The root crontab should be used to perform accounting data collection.
#
#
10 3 * * * /usr/sbin/logadm
15 3 * * 0 /usr/lib/fs/nfs/nfsfind
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
#10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___


例 8–4 他のユーザーの crontab ファイルを表示する

次の例は、他のユーザーの crontab ファイルを表示する方法を示します。


$ su
Password:
Sun Microsystems Inc.   SunOS 5.10      s10_51  May 2004
# crontab -l jones
13 13 * * * cp /home/jones/work_files /usr/backup/. > /dev/null 2>&1

crontab ファイルの削除

デフォルトでは、rm コマンドを使用して誤って crontab ファイルを削除してしまうことがないように、crontab ファイルは保護されています。crontab ファイルを削除する場合は、rm コマンドではなく crontab -r コマンドを使用してください。

デフォルトでは、crontab -r コマンドは自分自身の crontab ファイルを削除します。

このコマンドを使用するために、/var/spool/cron/crontabs ディレクトリ (crontab ファイルが入っている) に移動する必要はありません。

Procedurecrontab ファイルを削除する方法

始める前に

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

自分の crontab ファイルを削除するには、スーパーユーザーまたは同等の役割になる必要はありません。

  1. 次のように入力して、crontab ファイルを削除します。


    $ crontab -r [username]

    username は、crontab ファイルを削除するユーザーのアカウント名を指定します。他のユーザーの crontab ファイルを削除するには、スーパーユーザーの権限が必要です。


    注意 – 注意 –

    誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの中断文字を入力してください。この文字を入力すると、変更結果を保存せずに crontab コマンドを終了できます。この場合に変更結果を保存してファイルを終了すると、既存の crontab ファイルが空のファイルで上書きされます。


  2. crontab ファイルが削除されたことを確認します。


    # ls /var/spool/cron/crontabs
    

例 8–5 crontab ファイルを削除する

次の例では、ユーザー smith crontab -r コマンドを使用して自分の crontab ファイルを削除します。


$ ls /var/spool/cron/crontabs
adm     jones     lp     root    smith    sys     uucp
$ crontab -r
$ ls /var/spool/cron/crontabs
adm     jones     lp     root    sys    uucp

crontab コマンドの使用制御

/etc/cron.d ディレクトリ内の 2 つのファイルを使用して、crontab コマンドの使用を制御できます。 これらのファイルは cron.deny および cron.allow です。これらのファイルによって、指定したユーザーだけが、それぞれ自分の crontab ファイルの作成、編集、表示、または削除などの crontab コマンドのタスクを実行できるようにします。

cron.deny ファイルおよび cron.allow ファイルは、それぞれ 1 行に 1 ユーザー名が入ったリストからなります。

これらの使用制御用ファイルは、次のように連携して機能を果たします。

cron.denycron.allow ファイルを編集または作成するには、スーパーユーザーの権限が必要です。

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


$ cat /etc/cron.d/cron.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess

デフォルトの cron.deny ファイル内のユーザー名は、いずれも crontab コマンドを使用できません。このファイルを編集して、crontab コマンドの使用を拒否したいユーザー名を追加できます。

cron.allow のデフォルトファイルは提供されません。つまり、Oracle Solaris ソフトウェアをインストールした直後は、すべてのユーザー (デフォルトの cron.deny ファイルにリストされているユーザーを除く) が crontab コマンドを使用できます。cron.allow ファイルを作成した場合、そのユーザーだけが crontab コマンドを使用できます。

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

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

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

  2. /etc/cron.d/cron.deny ファイルを編集し、ユーザー名を 1 行に 1 つずつ追加します。crontab コマンドの使用を拒否するユーザーを入れます。


    daemon
    bin
    smtp
    nuucp
    listen
    nobody
    noaccess
    username1
    username2
    username3
    .
    .
    .
  3. /etc/cron.d/cron.deny ファイルに新しいエントリが含まれているか確認します。


    # cat /etc/cron.d/cron.deny
    daemon
    bin
    nuucp
    listen
    nobody
    noaccess

Procedurecrontab コマンドの使用を特定のユーザーに限定する方法

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

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

  2. /etc/cron.d/cron.allow ファイルを作成します。

  3. root ユーザー名を cron.allow ファイルに追加します。

    このファイルに root を追加しないと、スーパーユーザーの crontab コマンドの使用が拒否されます。

  4. ユーザー名を 1 行に 1 つずつ追加します。

    crontab コマンドの使用を許可するユーザーを入れます。


    root
    username1
    username2
    username3
    .
    .
    .
    

例 8–6 crontab コマンドの使用を特定のユーザーに限定する

次は、ユーザー jonestemp、および visitorcrontab コマンドを使用させない cron.deny ファイルの例です。


$ cat /etc/cron.d/cron.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess
jones
temp
visitor

次は、cron.allow ファイルの例です。ユーザー rootjoneslp および smith だけが、crontab コマンドを使用できます。


$ cat /etc/cron.d/cron.allow
root
jones
lp
smith

crontab コマンドの使用制限を確認する方法

特定のユーザーが crontab コマンドを使用できるかどうかを確認するには、そのユーザーのアカウントでログインして crontab -l コマンドを使用します。


$ crontab -l

そのユーザーが crontab を使用できて、すでに crontab ファイルを作成している場合は、そのファイルが表示されます。そのユーザーが crontab コマンドを使用できるが、crontab ファイルがない場合は、次のようなメッセージが表示されます。


crontab: can't open your crontab file

このユーザーは、cron.allow ファイル (が存在する場合) に含まれているか、cron.deny ファイルに含まれていません。

ユーザーが crontab コマンドを使用できない場合は、上記の crontab ファイルの有無に関わらず、次のメッセージが表示されます。


crontab: you are not authorized to use cron. Sorry.

このメッセージは、ユーザーが cron.allow ファイル (が存在する場合) に含まれていないか、cron.deny ファイルに含まれていることを意味します。

at コマンドの使用 (作業マップ)

作業 

説明 

参照先 

at ジョブを作成する

次のような目的には、at コマンドを使用する。

  • コマンド行から at ユーティリティーを起動する

  • 実行したいコマンドまたはスクリプトを、1 行に 1 つずつ入力する

  • at ユーティリティーを終了し、ジョブを保存する

at ジョブを作成する方法」

at 待ち行列を表示する

atq コマンドを使用し、at 待ち行列を表示する

at 待ち行列を表示する方法」

at ジョブを確認する

atq コマンドを使用し、特定のユーザーの at ジョブが待ち行列に入れられたかどうかを確認する

at ジョブを確認する方法」

at ジョブを表示する

at -l[job-id] を使用し、 at 待ち行列に入れられたジョブを表示する

at ジョブを表示する方法」

at ジョブを削除する

at -r [job-id] コマンドを使用し、待ち行列から at ジョブを削除する

at ジョブを削除する方法」

at コマンドの使用を拒否する

at コマンドの使用を拒否するには、 /etc/cron.d/at.deny ファイルを編集する

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

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 コマンドは何も返しません。