8.5. 指定時刻にジョブを実行【at、atq、atrm】

$ at[オプション]日時

指定した日時にジョブを実行するには、at コマンドが使用できます。しかし、定期的にジョブを実行するには、cron のほうがより一般的に使用されています。at コマンドを使用するには、atd デーモンが動作している必要があります。通常は自動的に起動されていますが、サービス管理ツールの turboservice などで確認してください。また、ジョブの実行結果が標準出力される場合は、その内容が実行したユーザー宛にメールで送信されます。その際、mail コマンドが使用されますので、sendmail や Postfix など MTA のパッケージもインストールされている必要があります。メールは、mail コマンドなどで確認できます。

at コマンドを実行すると、at> とプロンプトが表示されますので、指定時刻に実行したいコマンドを入力します。入力が完了したら、[Ctrl]+[D]キーを押し終了します。

日時は様々なフォーマットで指定可能です。ここでは、そのうちのいくつかを紹介します。日時指定のより詳細な情報は man ページを参照してください。

時刻は HH:MMHH は時、MM は分)という形式で指定できます。すでにその時刻を過ぎているときには次の日に実行されます。日付の指定は、 MMDDYYMM/DD/YYDD.MM.YYMM は月、DD は日、YY は年号の下2桁)などの形式で指定可能です。日付は、時刻の後に指定する必要があります。

# at 16:00        
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
at> grep "authentication failure" /var/log/messages
at>([Ctrl]+[D]キーを押す)
job 7 at 2003-02-17 16:05
# 

実行結果が標準出力される場合は、その内容のメールが実行したユーザー宛に送信されます。

ジョブをファイルに記述し、-f オプションでそのファイルを指定することも可能です。例えば、以下のように記述した at_test というファイルを作成します。実行したいコマンドが複数ある場合は、次の行に続けて入力します。

grep "authentication failure" /var/log/messages

作成した at_test ファイルを -f オプションで指定して at コマンドを実行します。

# at 04:00 -f at_test

その他の代表的なオプションを以下に示します。

表 8-7. at コマンドのオプション

-f ファイル名指定したファイルからジョブを入力します。
-l予約されたジョブを表示します。
-d ジョブ番号ジョブを削除します。

予約したジョブを表示するには、atq コマンドを使用します。at コマンドに -l オプションを指定した場合も同じ働きをします。

$ atq

先頭の数字は、予約されたジョブのキュー番号です。予約されたジョブを削除するには、atrm コマンドにこのキュー番号を渡します。at コマンドに -d オプションを指定した場合も同じ働きをします。

$ atrm 3

なお、一般ユーザーの at コマンドの使用を /etc/at.allow/etc/at.deny で制限することが可能です。/etc/at.allow が存在すれば、このファイルで指定されたユーザーのみ at コマンドを使用できます。/etc/at.allow が存在しなければ、/etc/at.deny をチェックし、このファイルに指定されていない全てのユーザーが at コマンドを使用できます。つまり、空の /etc/at.deny が存在すれば、全てのユーザーが使用することができ、この設定がデフォルトです。もしどちらのファイルも存在しなければ、root のみ at コマンドを使用することができます。