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
がほとんどを作りました。