atコマンドは、特定の日時に1回限りのタスクをスケジュールするLinux端末の方法です。
コンピュータは いますが、誰もが自動化の方法を知っているわけではありません。しかし、特定の時間にコンピュータのタスクをスケジュールし、それを忘れることができるのは本当に素晴らしいことです。特定の時間にアップロードまたはダウンロードするファイルがある場合、まだ存在しないが特定の時間に存在することが保証されているファイルのバッチを処理する必要がある場合、設定を監視する必要がある場合、または仕事からの帰り道にパンとバターを拾うためのフレンドリーなリマインダーが必要な場合などです。
atコマンドの出番です。
Linuxのatコマンドとは何ですか?
atコマンドは、Linuxターミナルで、特定の日時に単発のジョブをスケジューリングする方法です。ターミナル上で簡単に実装できる自発的な自動化です。
atをインストール
Linuxでは、atコマンドがすでにインストールされている場合があります。インストールされているかどうかは、at -Vコマンドで確認できます。バージョン番号が返されれば、atがインストールされています。
$ at -Vat version x.y.z
atを使おうとしてコマンドが見つからない場合、最近のLinuxディストリビューションのほとんどは、足りないatパッケージを提供してくれます。
ほとんどのLinuxシステムでは、systemctlコマンドを使ってこのサービスを有効にし、今後自動的に起動するように設定することができます:
$ sudo systemctl enable --now atd
でインタラクティブにジョブをスケジューリングします。
atコマンドにタスクを実行させたい時刻を指定すると、対話型のatプロンプトが開きます。指定された時間に実行したいコマンドを入力することができます。
例えるなら、携帯電話のカレンダーアプリのようなものです。まず、ある日のある時刻にイベントを作成し、何が起こるかを指定します。
例えば、これから数分間、自分へのメモを計画するタスクを作成してみてください。ここで簡単なタスクを実行すると、失敗する可能性が低くなります。アットプロンプトを終了するには、キーボードの Ctrl+D を押します。
$ at 11:20 AMwarning: commands will be executed using /bin/shat> echo "hello world" > ~/at-test.txtat> <EOT>job 3 at Mon Jul :
ご覧の通り、atは直感的で自然な時間の定義を使っています。24時間時計を使ったり、時間をUTCや特定のISOフォーマットに変換したりする必要はありません。一般的には、正午、午後1時30分、午後13時37分など、自然に思いつく記号を使って、タスクを発生させたい時刻を表すことができます。
数分待ってから、作成したファイルに対してcatコマンドまたはtacコマンドを実行し、タスクが実行されたことを確認します:
$ cat ~/at-test.txthello world
でタスクをスケジュールします。
タスクのスケジューリングにat対話型プロンプトを使う必要はありません。echoやprintfを使ってコマンドを送ることができます。この例では、now記号を使って、タスクを今から何分遅らせるかを指定しています:
$ echo "echo 'hello again' >> ~/at-test.txt" | at now +1 minute
1分後、新しいコマンドが実行されたことを確認します:
$ cat ~/at-test.txthello worldhello again
時間表現
atコマンドは時間の解釈に関して非常に寛容です。どれが一番便利かによって、多くの形式から選ぶことができます:
YYMMDDhhmm[.ss]CCYYMMDDhhmm[.ss]nowmidnightnoonteatimeAMPM
日時は絶対時間でも、プラス記号を付けて相対時間にすることもできます。相対的な時間を指定する場合は、以前に使ったことのある単語を使うことができます:
minuteshoursdaysweeksmonthsyears
時刻と日付の構文
atコマンドは日付よりも時間の入力に寛容ではありません。しかし、日付のデフォルトは現在の日付であり、タスクを将来の日付にスケジューリングする場合にのみ必要です。
これらは有効な表現の例です:
$ echo "rsync -av /home/tux me@myserver:/home/tux/" | at 3:30 AM tomorrow$ echo "/opt/batch.sh ~/Pictures" | at 3:30 AM 22$ echo "echo hello" | at now + 3 days
atキューの表示
atに夢中になり、机の上の紙切れに落書きする代わりにタスクをスケジューリングするようになったら、まだキューにタスクが残っていないかチェックしたくなるかもしれません。
at キューを表示するには、atq コマンドを使用します:
10 Thu Jul : a tux9 Tue Jul : a tux7 Tue Jul : a tux
キューからタスクを削除するには、atrm コマンドとタスク番号を使用します。例えば、タスク 7 を削除するには
$ atrm 710 Thu Jul : a tux9 Tue Jul : a tux
スケジュールされたタスクの実際の内容を見るには、/var/spool/atの下を見る必要があります。このディレクトリの内容を見ることができるのはrootユーザーだけなので、タスクの内容を見たりcatしたりするにはsudoを使う必要があります。
Linuxでのタスクのスケジューリング
atシステムは、その日のうちにジョブを実行するのを忘れたり、留守中にコンピューターにジョブを実行させたりするのを避ける良い方法です。cronと違って、atはジョブを今からずっと実行し続けることを要求しないので、その構文はcronよりずっとシンプルです。
次にコンピューターに記憶させ、管理させたい小さなタスクがあるときは、atコマンドを試してみてください。





