atは時間を指定しコマンドやプログラムを実行するコマンドだ。
同じ時間指定しプログラムを実行するコマンドはcronコマンドがある。cronコマンドは繰り返し実行予約ができるが、atコマンドは一度きりの実行という違いがある。
atコマンドの基本
コマンドの基本動作
使い方は、次のとおりだ。
$ at 日時
2020年5月4日15:45に指定したプログラムを実行する場合は、次のコマンドだ。
$ at 15:45 05042020
すると、何を実行するか問い合わせがある。
ここで実行するコマンドやプログラムを登録する。今回はx1.txtというファイルをtouchコマンドで作成するコマンドを登録してみる。
> touch x1.txt
登録が終了したら、Ctrl+Dのショートカットキーを押し、設定を完了する。
2020年5月4日15:45にx1.txtというファイルをtouchコマンドで作成する動作をジョブ番号70番として登録した。
日付の形式は、2桁の分、半角コロン、2桁の時、半角空白、4桁の西暦、2桁の月、2桁の日のデータで登録するほか、「15:45 05042020」のように年月日を半角ピリオドで区切る書式でも可能なほか、次のような書式も可能だ。
- 「23:55」:次に来る23:55
- 「05042020」:2020年5月4日の設定を確定した時刻
- 「now + 1 min」:現在から1分後
- 「now +1 hour」:現在から1時間後
- 「tomorrow」:翌日の設定を確定した時刻
- 「today + 3 day」:3日後の設定を確定した時刻
- 「00:00 today + 2 day」:2日後の午前0時
- 「23:55 05042020 +2 day」:2020年4月7日の23:55
atコマンドのオプションたち
オプションの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション -f
予約するジョブのファイルを指定する
オプション -q
小文字アルファベット1文字のキュー番号を割り振りする
オプション -t
日付の形式を別の書式で入力する
オプション -m
出力がない場合でもメールする
オプション -l
予約しているジョブをリストする
オプション -d
予約しているジョブを削除する
オプション -b
システムに負荷をかけないようにジョブを実行する
オプション -v
ジョブの実行時間も詳細に表示する
オプション -c
予約したジョブの詳細を表示する
-fオプション:予約するジョブのファイルを指定する
予約するジョブのファイルを指定する書式は次のとおりだ。
$ at 日時 -f ファイル名
2020年5月4日15:45にシェルプログラムc1.shを実行する場合は、次のコマンドだ。
$ at 15:45 05042020 -f c1.sh
2020年5月4日15:45に指定したプログラムを実行する設定をジョブ番号71番として登録した。
実際には単純に1コマンドごと登録する使い方よりも、ある程度のコマンドをシェルプログラム化し-fオプションを使って登録することのほうが多いだろう。
-qオプション:小文字アルファベット1文字のキュー番号を割り振りする
小文字アルファベット1文字のキュー番号を割り振りする書式は次のとおりだ。
$ at -q キュー番号 日時
小文字アルファベット「c」のキュー番号を割り振りし2020年5月4日15:45に指定したコマンドを実行する場合は、次のコマンドだ。
$ at -q c 15:45 05042020
小文字アルファベット「c」のキュー番号を割り振りし2020年5月4日15:45に指定したコマンドを実行する設定をジョブ番号72番として登録した。
キュー番号はa~zまでの1文字を割り振ることができ、重複も可能だ。
キュー番号で予約した動作をグループで管理することができる。
-qオプションがない場合は、キュー番号は「a」となる。
-tオプション:日付の形式を別の書式で入力する
オプションなしでの日付の形式は、日、月、年という順番で入力するので認識しにくい。そこで、西暦4桁、月2桁、日2桁、時2桁、分2桁、(間に空白はいらない)という書式で入力する書式は次のとおりだ。
$ at -t 日時形式
西暦4桁、月2桁、日2桁、時2桁、分2桁の書式で入力し2020年5月1日15:45に指定したコマンドを実行する場合は、次のコマンドだ。
$ at -t 202005011545
西暦4桁、月2桁、日2桁、時2桁、分2桁の書式で入力し2020年5月1日15:45に指定したコマンドを実行する設定をジョブ番号73番として登録した。
-mオプション:出力がない場合でもメールする
atコマンドは設定したユーザー宛に結果をメールする。オプションなしでは出力がない場合、メールはしない。-mオプションを設定すれば結果の出力がない場合でもメールする。
書式は次のとおりだ。
$ at -m 日時
2020年5月4日15:45に指定したコマンドを実行し、出力がない場合でもメールする場合は、次のコマンドだ。
$ at -m 15:45 05042020
2020年5月4日15:45に指定したコマンドを実行し、出力がない場合でもメールする設定をジョブ番号74番として登録した。
-lオプション:予約しているジョブをリストする
予約しているジョブをリストする書式は次のとおりだ。
$ at -l
ジョブ番号、実行日時、キュー番号、設定したユーザーの順で一覧を表示した。
-qオプションを使えば、キュー番号で絞り込んで表示することができる。
$ at -l -q キュー番号
キュー番号cのみ絞り込んで表示するには次のコマンドだ。
$ at -l -q c
キュー番号cのみの一覧を表示した。
実行が終了した過去のコマンドはリストから自動で削除される。
atコマンドの-lオプションはatqコマンドと同じ動作をする。
-dオプション:予約しているジョブを削除する
予約しているジョブを削除する書式は次のとおりだ。
$ at -d ジョブ番号
ジョブ番号73の予約を削除する場合は、次のコマンドだ。
$ at -d 73
ジョブ番号34の予約を削除した。
atコマンドの-dオプションはatrmコマンドと同じ動作をする。
-bオプション:システムに負荷をかけないようにジョブを実行する
時間を指定する自動実行プログラムは時にシステムに負荷をかけるときがある。システムに負荷をかけないようにジョブを実行する書式は次のとおりだ。
$ at -b 日時
2020年5月4日15:45にシステムに負荷をかけないように指定したコマンドを実行する場合は、次のコマンドだ。
$ at -b 15:45 05042020
atコマンドの-bオプションはbatchコマンドと同じ動作をする。
-vオプション:ジョブの実行時間も詳細に表示する
ジョブの実行時間も詳細に表示する書式は次のとおりだ。
$ at -v 日時
2020年5月4日15:45に指定したコマンドを実行するようにジョブの実行時間も詳細に表示し設定する場合は、次のコマンドだ。
$ at -v 15:45 05042020
2020年5月4日15:45に指定したコマンドを実行するようにジョブ番号75番として登録した。atコマンド入力直後の行にジョブの実行時間も詳細に表示している。
-cオプション:予約したジョブの詳細を表示する
予約したジョブの詳細を表示する書式は次のとおりだ。
$ at -c ジョブ番号
ジョブ番号74の詳細を表示するには、次のコマンドだ。
$ at -c 74
ジョブ番号74の詳細を表示した。
at関連コマンド
最後にatコマンドに関連して、基本的な時間指定しコマンドを実行するコマンドも紹介しておく
atqコマンド
予約しているジョブをリストする。
atrmコマンド
予約しているジョブを削除する。
batchコマンド
システムに負荷をかけないようにジョブを実行する。
cronコマンド
定期的にジョブを実行する。
まとめ
atコマンドで別のコマンドを実行予約する場合は、ファイルを指定しないで設定すればとても簡単に設定できるが、コマンド名まですべて入力して1行で設定することもできる。
実行するのがシェルプログラムの場合は、簡易的な設定はできないので、-fオプションを使って指定しよう。
日付の入力間違いには最新の注意をしたい。登録後は-lオプション、またはatqコマンドできちんと登録されたか確認しよう。
また、atコマンドは、atq、atrmコマンドと同時に使うことになる。セットで覚えるようにしよう。
> 小文字アルファベット「c」のキュー番号を割り振りし2020年4月5日15:45に指
> 定したコマンドを実行する場合は、次のコマンドだ。
>
> $ at -q c 15:45 05042020
↑間違えてますよ。信用性に関わるので修正した方が宜しいかと。
ご愛読いただきありがとうございます。
また、ご指摘いただきありがとうございます。
コマンドの内容に対して本文中の日付表記が誤っておりました。
引き続き、ご愛読のほど、よろしくお願いいたします。
2019-09-13
MacOS で at コマンドを有効化して使ってみる
上記にはコメントできないのでこちらで
catalina での有効化をご存じでした教えてください。
いつもご愛読いただきありがとうございます。
未検証ではありますが、catalinaで動作しなくなったコマンド類はその実行ファイルにフルディスクアクセス権限を付けることで対応する可能性があるようです。
macOS 10.15 catalina で crontab を使用する | 林檎コンピュータ
https://mac-ra.com/catalina-crontab/
上記記事ではcrontab(/usr/sbin/cron)の例となっていますが、atコマンドの場合は /usr/libexec/atrun となるようですのでお試しください。