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) を参照してください。
英大文字を指定してジョブが登録された場合、 そのジョブは指定時刻に batch を使って実行されるものとして扱われます。 指定時刻になると、 負荷平均に関するバッチ処理ルールが適用されます。 atq に対して特定のキューが指定されると、 そのキュー内にある未実行ジョブを表示するだけです。
表示される時間は "Thu Feb 20 14:50:00 1997" といった書式です。
ファイル /var/run/utmp が利用できないか壊れている場合、 あるいは at の実行時にユーザーがログインしていない場合は、 環境変数 LOGNAME に示される userid のユーザーにメールが送信されます。 これが未定義かあるいは空の場合は、 現在の userid に対して処理が行われます。
現在実装されている At や batch では、 ユーザー間でのリソース競合時には適していません。 利用環境においてこれが発生する場合は、nqs のような別のバッチシステムの利用が必要かもしれません。