AT(1)

名前
at, batch, atq, atrm - 後に実行するジョブのキュー操作、確認、削除

書式
at [-V] [-q queue] [-f file] [-u username] [-mMlv] timespec ..."
at [-V] [-q queue] [-f file] [-u username] [-mMkv] [-t time]
at -c job [...]
at [-V] -l [-o timeformat] [job ...]
atq [-V] [-q queue] [-o timeformat] [job ...]
at [-rd] job [...]
atrm [-V] job [...]
batch
at -b

説明
at と batch は、 標準入力や指定されたファイルからコマンドを読み取って、 /bin/sh を使って後で実行します。

at  指定された時間にコマンドを実行します。

atq ペンディングとなっているユーザージョブの一覧を表示します。 ただしスーパーユーザーが起動した場合には、 全ユーザーのジョブを表示します。 出力行の書式は (各ジョブを 1 行ずつに) 、ジョブ番号、日付、時間、キュー、ユーザー名を表示します。

atrm
    ジョブ番号によって識別されるジョブを削除します。

batch
    システムの負荷レベルが許容される範囲にある場合にコマンドを実行します。 つまり負荷平均が 0.8 以下、 または atd で指定された値以下の場合にコマンドを実行します。

at では複雑な時間指定ができます。 これは POSIX.2 標準を拡張したものです。 ジョブを実行する時刻は HH:MM という形式で指定できます。 (すでにその時刻が過ぎている場合は、 次の日として扱われます。) また midnight (真夜中), noon (正午), teatime (午後 4 時のティータイム) を指定できます。 午前午後を表す AM, PM も指定可能です。 さらにコマンドを実行する日付を指定することもできます。 日付の書式は month-name day であり、 任意として year を指定します。 あるいは MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY, [CC]YY-MM-DD が可能です。 日付の指定は、 時刻の指定の後に行わなければなりません。 時間の指定において、 now + count time-units といった記述もできます。 ここにおいて time-units とは minutes, hours, days, weeks のことです。 at に対しては、 時刻の後ろにサフィックスとして today をつければ、 本日の実行を指示することになります。 サフィックスとして tomorrow をつければ明日の実行となります。

たとえば今から 3 日後の午後 4 時にジョブを実行する場合は、 at 4pm + 3 days と指定します。 7 月 31 日の 10:00am にジョブを実行するには、 at 10am Jul 31 と指定します。 明日の 1am であれば at 1am tomorrow とします。

ジョブの実行に指定された時刻、日付が完全に過去であった場合、 ジョブはできる限りそのときに実行されます。 たとえば今が 8pm であって at 6pm today と実行すると、 8:05pm には実行されているはずです。

時間指定に関する定義は /usr/share/doc/at/timespec に記述されています。

at と batch はともに標準入力から読み込みを行い、 あるいは -f オプションが指定されていればファイルから読み込みを行って、 処理が実行されます。 ワーキングディレクトリ、 環境変数 (ただし BASH_VERSINFO, DISPLAY, EUID, GROUPS, SHELLOPTS, TERM, UID, _ を除く)、 umask は、 いずれも処理実行時の値が保持されます。

現在の at は setuid プログラムとして実装されています。 したがって他の環境変数 (つまり LD_LIBRARY_PATH や LD_PRELOAD など) も、 同様にエクスポートされません。 これは将来変更されるかもしれません。 これを回避するには、 ジョブ内において明示的にそれらの変数を設定してください。

at と batch のコマンドが su(1) シェルから呼び出された場合、 現在の userid が保持されます。 このユーザーに対しては、 コマンド実行によって標準エラー出力や標準出力への書き込みが発生した際には、 その内容がメール送信されます。 メールは /usr/sbin/sendmail コマンドを使って送信されます。 su(1) シェルから at が実行されると、 ログインシェルの所有者がメールを受信します。

スーパーユーザーであれば、 いつでもこのコマンドを使用できます。 それ以外のユーザーが利用できるかどうかは、 /etc/at.allow ファイルまたは /etc/at.deny によって決まります。 詳しくは at.allow(5) を参照してください。

オプション

-V  標準エラー出力にバージョン番号を表示して、 正常終了します。

-q queue
    指定されたキューを使用します。 キューの指定には英字 1 文字を使います。 有効な文字は a から z と A から Z です。 キュー a は at に対するデフォルトであり、 キュー b は batch に対するデフォルトです。 これ以降の文字を使ったキューは、 それだけ nice 値が大きいものとして実行されます。 特別なキューとして "=" があり、 現在実行中のキューを示すものとして、 この文字が予約されています。

英大文字を指定してジョブが登録された場合、 そのジョブは指定時刻に batch を使って実行されるものとして扱われます。 指定時刻になると、 負荷平均に関するバッチ処理ルールが適用されます。 atq に対して特定のキューが指定されると、 そのキュー内にある未実行ジョブを表示するだけです。

-m  ジョブが終了する際に、 出力が何もなくても、 ユーザーに対してメールを送信します。

-M  ユーザーにメールを送信しません。

-u username
    現在ユーザーではなく username にメールを送信します。

-f file
    ジョブを標準入力からではなく file から読み込みます。

-t time
    時刻 time にジョブを実行します。 書式は [[CC]YY]MMDDhhmm[.ss] とします。

-l  atq のエイリアスです。

-r  atrm のエイリアスです。

-d  atrm のエイリアスです。

-b  batch のエイリアスです。

-v  ジョブを読み込む前に、 ジョブが実行される時間を表示します。

表示される時間は "Thu Feb 20 14:50:00 1997" といった書式です。

-c  コマンドラインから指定されたジョブの内容を標準出力に表示します。

-o fmt
    ジョブ一覧に対して strftime のような時間書式を用います。

ファイル
/var/spool/atjobs
/var/spool/atspool
/proc/loadavg
/var/run/utmp
/etc/at.allow
/etc/at.deny

関連項目
at.allow(5), at.deny(5), atd(8), cron(1), nice(1), sh(1), umask(2).

バグ
Linux において batch が正しく処理されるためには、 /proc にマウントされた proc タイプのディレクトリが存在している必要があります。

ファイル /var/run/utmp が利用できないか壊れている場合、 あるいは at の実行時にユーザーがログインしていない場合は、 環境変数 LOGNAME に示される userid のユーザーにメールが送信されます。 これが未定義かあるいは空の場合は、 現在の userid に対して処理が行われます。

現在実装されている At や batch では、 ユーザー間でのリソース競合時には適していません。 利用環境においてこれが発生する場合は、nqs のような別のバッチシステムの利用が必要かもしれません。

著者
Thomas Koenig がほとんどを作りました。