名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | Trusted Solars での変更点 | 関連項目 | 注意事項
at ユーティリティは、一群のコマンドを標準入力から読み込み、 それを 1 つの at-job として統合し、指定された時刻に実行します。
この at-job は、あとでシェルを別途呼び出して実行します。 このシェルは、別のプロセスグループで、制御端末なしで 動作しているものです。ただし環境変数、現作業用ディレクトリ、ファイル生成マスク (umask(1))、システム資源の限界 ( sh と ksh だけに適用。詳しくは ulimit(1) を参照) については、at を実行した時点のものが保持されて、at-job 実行時に使用されます。
at-job が投入されると、at_job_id と実行開始予定時刻が標準エラー出力に書き出されます。 at_job_id は、at-job の識別子で、英数字とピリオドだけで構成される文字列です。投入時点で、そのジョブが一意に識別できるような名前を at_job_id としてシステムが割り当てます。
ユーザーへの通知やジョブの標準出力の処理方法に関しては、 -m オプションの項で説明します。
at や batch (後述) を使用できるのは、ファイル /usr/lib/cron/at.allow 中に名前が登録されているユーザーだけです。このファイルが存在していない場合は、ファイル /usr/lib/cron/at.deny をアクセスして、そのユーザーの at 使用を拒否すべきかどうかを決定します。
どちらのファイルも存在しないときは、スーパーユーザー特権を持ったプロセスだけが ジョブを投入できます。 at.deny だけが存在しその内容が空の場合には、 どのユーザーもジョブを投入できます。 at.allow と at.deny の両ファイルは、どちらも 1 行に 1 つのユーザー名という形式です。
batch ユーティリティは、あとで実行すべきコマンド群を読み込みます。 以下のコマンドと同じ意味を持ちます。
at -q b -m now |
Trusted Solaris では、ユーザーは at と batch コマンドで at-job ファイルを作成できます。このファイルは、呼び出し元プロセスの機密ラベルに一致する適切な SLD にインストールされます。また、次の 2 つのどちらかの条件に当てはまれば、ユーザーは at コマンドで、呼び出し元プロセスの機密ラベルにある現在のユーザーが所有する at ジョブをリスト表示または削除できます。1 番目の条件は、at ジョブの所有者のユーザー名が /etc/cron.d/at.admin ファイル (at の管理ユーザーのリストが含まれる) にあるか、役割ユーザーであり、さらに、コマンドの呼び出しユーザーが at admin を変更承認を持っているときです。2 番目の条件は、at ジョブの所有者のユーザー名が /etc/cron.d/at.admin ファイルにないか、役割ユーザーでなく、さらに、コマンドの呼び出しユーザーが at users を変更承認を持っているときです。
以下のオプションが指定できます。 ユーザーのログインシェルが pfsh の場合、ユーザーは -c、-k、-s オプションを指定できないことに注意してください。-c、-k、-s、-p オプションが指定されず、pfsh がログインシェルである場合は、pfsh が at ジョブの実行に使用されます。しかし、pfsh がユーザーのログインシェルでない場合は、デフォルトで $SHELL 環境変数が使用するシェルを決定します。$SHELL が設定されていない場合、デフォルトで sh が使用されます。
C シェル。csh(1) を使って at-job を実行します。
Korn シェル。ksh(1) を使って at-job を実行します。
Bourne シェル。sh(1) を使って at-job を実行します。
プロファイルシェル。pfsh(1M)が at-job の実行に使用されます。
at-job の元になるファイルとして標準入力以外のファイルを使用するとき、 そのファイルのパスを指定します。
(小文字のエル) at_job_id オペランドが指定されていない場合、呼び出し元のプロセスの機密ラベルで作業する現在のユーザー用にスケジュールされているすべてのジョブを報告します (あるいは、現在のユーザーが適切な承認を持つ場合、他のユーザーのジョブを報告します)。 at_job_id が指定されなかったときは、 コマンドを呼び出したユーザー用にスケジュールした ジョブをすべて報告します。at_job_id が指定されていれば、そのジョブに関するジョブだけを出力します。 現在のユーザーが at ジョブを所有していない場合、次の 2 つのどちらかの条件に当てはまれば、そのジョブ情報が表示されます。1 番目の条件は、at ジョブの所有者のユーザー名が /etc/cron.d/at.admin ファイルにあるか、役割ユーザーであり、さらに、現在のユーザーが at admin を変更承認を持っているときです。2 番目の条件は、at ジョブの所有者のユーザー名が /etc/cron.d/at.admin ファイルにないか、役割ユーザーでなく、さらに、現在のユーザーが at users を変更 承認を持っているときです。
at-job の実行が終了したら、その旨をメールで当該ユーザーに通知します。 at-job が生成した標準出力と標準エラー出力の内容も、 他の出力先が指定されない限り、ユーザーにメールで送られます。 なおメールは、ジョブが何の出力も生成しなかった場合でも送付されます。
-m オプションを省略すると、標準出力と標準エラー出力の 内容は、他の出力先が指定されない限り、 メールで当該ユーザーに通知されます。 そのような出力が生成されなければ、 ジョブの終了は通知されません。
queuename で示す待ち行列にジョブをスケジュールします。 -l オプションも一緒に指定すると、その待ち行列だけが検索の対象となります。queuename として指定できるのは、 a から z までの英小文字です。デフォルトでは、at-job は待ち行列 a にスケジュールされます。また待ち行列 b はバッチジョブ用に予約されています。待ち行列 c は cron ジョブ用に予約されているので、 -q オプションの引数として使うことはできません。
at ユーティリティでスケジュールされたジョブのうち、at_job_id で示す識別子を持ったジョブを削除します。 指定した at_job_id を現在のユーザーが所有していない場合、次の 2 つのどちらかの条件に当てはまれば、そのジョブが削除されます。1 番目の条件は、at_job_id の所有者のユーザー名が /etc/cron.d/at.admin ファイルにあるか、役割ユーザーであり、さらに、現在のユーザーが at admin を変更承認を持っているときです。2 番目の条件は、at_job_id の所有者のユーザー名が /etc/cron.d/at.admin ファイルにないか、役割ユーザーでなく、さらに、現在のユーザーが at users を変更承認を持っているときです。
time 引数が示す時刻に、ジョブを投入します。 引数の形式は、touch(1) ユーティリティが規定する形式と同一です。
以下のオペランドが指定できます。
以前の at ユーティリティによりジョブがスケジュールされたときに 報告された名前。
ジョブを投入し実行する日時を指定します。 すべての timespec の値は、空白文字で区切られて連結されていると見なされます。 日付と時刻の値は、そのユーザーのタイムゾーン ( TZ 変数が決定) で表されていると見なされます。 ただし後述する time オペランドでタイムゾーン名を指定した場合を除きます。
C ロケールの場合、日時を指定する文字列は以下に述べる 3 つの 部分で構成されます。 C ロケールの LC_TIME カテゴリから得られる値は大文字と小文字の区別はなく、 たとえば A と a は同じと見なされます。
これは時刻を表す部分で、1、2、または 4 桁の数で指定します。 1 桁または 2 桁の場合は「何時」を示す値として、 4 桁の 場合は「何時何分」を示す値として解釈されます。 2 つの数をコロンで区切り、 hour:minute の形式で「何時何分」を指定することもできます。 時刻指定の直後に AM または PM ( LC_TIME ロケールカテゴリの am_pm キーワードから得られる値) 表示を付加することもできます。 この付加表示がなければ、24 時間制で記述された時刻と見なされます。 GMT、UCT、または ZULU ( あえて使用する場合 ) のタイムゾーン名を、 ユニバーサル時間を調整する時間の指定に 続けることもできます。 その他のタイムゾーンは TZ 環境変数を使用して指定できます。また time の部分に、C ロケールの以下のトークンのいずれかを記述することも可能です。
12:00 am (真夜中) を表します (00:00) 。
12:00 pm (正午) を表します。
現在の日時を表します。つまり at now という指定は、ただちに at-job を投入するという意味ですが、 すぐに実行されるかどうかはその時点でのジョブの スケジューリング状況に依存します。
日付を示す date の指定は任意で、「月」の名前 (LC_TIME ロケールカテゴリの mon または abmon キーワードから得られる値) の後に「日」を表す数値を記述する (さらにその後にコンマと「年」を表す数値があってもよい) 方法と、曜日 (LC_TIME ロケールカテゴリの day または abday キーワードから得られる値) を記述する方法があります。 さらに C ロケールには以下の 2 つの特殊な日付が定義されています。
現在の日付が示す日、つまり当日を表します。
現在の日付が示す日の次の日、つまり翌日を表します。
date を省略すると、指定された時刻が現時刻より後であれば当日、 現時刻より前であれば翌日とみなされます。 date として「月」を指定し「年」を省略した場合、 月の値が当月よりも前であれば翌年とみなされます。
increment 引数は任意指定で、正の符号 (+) 数値の後に minutes、hours、days、weeks、months、years の文字列のいずれかを付加したものです。 複数形を示す s は省略できます。 また + 1 と同じ意味を持つキーワード next も使用できます。たとえば次の 2 つのコマンドは同じ意味となります。
$ at 2pm + 1 week $ at 2pm next week |
この項で述べる at コマンド行の形式は、 C ロケールに対してだけ保証されています。 その他のロケールでは、 midnight、noon、now、mon、abmon、day、abday、today、tomorrow、minutes、hours、days、weeks、months、years、next の各指定はサポートされていません。
コマンドの実行は、別のプロセスグループで制御端末なしで 動作しているシェルを別途呼び出して行うので、 コマンドを呼び出した環境での オープンファイル記述子やトラップ、優先順位などは 失われてしまいます。
次のコマンドシーケンスは、端末において使用できます。
$ at -m 0730 tomorrow sort < file >outfile <EOT> |
次のシーケンスは、出力先を標準エラー出力からパイプに変更するもので、 コマンドプロシージャの中で使用すると便利です。 なお、出力先変更指定の記述順序は重要なので注意してください。
$ at now + 1 hour <<! diff file1 file2 2>&1 >outfile | mailx mygroup |
ジョブ自身に再スケジュールさせるため、 at-job の中から at を呼び出すことができます。 次の例では、 my.daily という名の日常業務用スクリプトは毎日実行されます。 ただし通常は、 crontab を使う方法が一般的です。
# my.daily runs every day at now tomorrow < my.daily daily-processing |
C ロケールの timespec の 3 つの部分は、明示的に記述してあれば 高い自由度で使用できます。 時間やオペランド指定の例を以下に示します。
at 0815am Jan 24 at 8 :15amjan24 at now "+ 1day" at 5 pm FRIday at '17 utc+ 30minutes' |
at と batch の両ユーティリティの実行に影響を与える環境変数 LC_CTYPE、LC_MESSAGES、NLSPATH、LC_TIME についての詳細は、environ(5) を参照してください。
ユーザーログインシェルが pfsh でないときに、at-job を呼び出すのに用いるコマンドインタプリタの名前を表します。at-job を呼び出すのに用いるコマンドインタプリタの名前を表します。 この変数が設定されていないか値が NULL の場合には、 sh が使用されます。 sh 以外の値に設定されていれば、そのシェルを使用します。 このとき、どのシェルを使うかを表す 警告メッセージが出力されます。
タイムゾーンを表します。 ジョブは、 timespec または -t time が示す時刻に実行するために投入されますが、この時刻は TZ 変数が示すタイムゾーンに対応した値です。 timespec の値にタイムゾーン指定が含まれていれば、 TZ が示すゾーンに代わってそちらが使用されます。 timespec にタイムゾーン指定が含まれておらず、 TZ も未設定か NULL の場合、デフォルトのタイムゾーンが用いられます。
環境変数 DATEMSK が設定されていれば、 at はその値を、書式文字列を含んでいるテンプレートファイルの 完全パス名として使用します。 この文字列は書式記述子とテキスト文字から構成され、環境変数 LANG または LC_TIME の設定値に従って各国の言語固有の日付表示形式をサポートするために 使用されます。 利用可能な書式記述子の一覧については、getdate(3C) を参照してください。 なお「オペランド」の項で説明している time と date 引数、特殊名の noon、midnight、now、next、today、 tomorrow、さらに increment 引数の書式は、DATEMSK が設定されている場合には認識されません。
at と batch の両ユーティリティへのアクセス権を持つユーザーの一覧。 1 行に 1 ユーザー名の形式
at と batch の両ユーティリティへのアクセスを許されないユーザーの一覧。 1 行に 1 ユーザー名の形式
at 用の管理ユーザーの名前 (1 行に 1 つ)。このファイルには役割名は指定しません。
次の属性については attributes(5) のマニュアルページを参照してください。
at コマンドが成功するためには、 proc_audit_tcb
、 file_chown
、および file_dac_read
の強制された特権が必要です。
at-job ファイルごとに補助ファイルが /var/spool/cron/atjobs ディレクトリに作成されます。規約に従って、このファイルには at_job_id.ad という名前が付けられます。このファイルは clock デーモンが at ジョブの実行を設定するために使用されます。
passwd エントリ中のユーザーのログインシェルがプロファイルシェルの場合、at ジョブはプロファイルシェルで実行されます。それ以外の場合、ユーザーが (-c、-s、-k、or -p オプションのいずれかで) 指定したシェルか、 $SHELL 環境変数 ($SHELL が設定されていない場合、デフォルトは sh) が at ジョブの実行に使用されます。
crontab(1), pfsh(1M)
待ち行列を使用しているかどうかにかかわらず、 cron の実行は 100 ジョブに限られています。
cron ではジョブの実行に遅れの出る場合があります。 これらの遅れによって cron ジョブの処理がハングしたように見えることがあります。 すべてのジョブは最後には実行されますが、 極端に遅れが生じた場合には、 cron を終了させてから再起動させることが 唯一の回避策です。
名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | Trusted Solars での変更点 | 関連項目 | 注意事項