このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】時間を指定してコマンドやスクリプトを実行:atコマンド

時間を指定してコマンドやスクリプトを実行:atコマンド

 Linuxシステム管理において、特定の時刻に一度だけコマンドやスクリプトを実行する必要がある場合があります。例えば、特定の時間にバックアップを開始したり、一時的なメンテナンス作業をスケジュールしたりする場合です。こうした一度きりのタスク実行を効率的に管理するために利用されるのが「atコマンド」です。atコマンドを使用することで、指定した時間にコマンドやスクリプトを自動的に実行することができます。

atコマンドの概要

 atコマンドは、指定した時間に一度だけコマンドやスクリプトを実行するためのツールです。cronのように定期的に実行するのではなく、特定の時刻に一度だけ実行したい場合に使用されます。

【構文】
at [オプション] 時刻

主なオプションと説明

オプション説明
-d ジョブ番号 または -r ジョブ番号指定したジョブ番号のジョブを削除します。
-l予約されているジョブのリストを表示します。
-f ファイル名指定したファイルの内容を実行します。
主なオプションと説明

atコマンドで指定可能な書式の例

書式説明
7:00 AM朝7時
10:00 PM夜10時
now + 1 minute今から1分後
now + 3 days今から3日後
5:00 AM + 2 weeks2週間後の朝5時
書式の例

atパッケージのインストール

・「at」コマンドを実行します。

Ubuntu22.04LTSの場合ですが、「コマンド 'at' が見つかりません。」と表示されます。

user01@ubuntu-vm:~$ at
コマンド 'at' が見つかりません。次の方法でインストールできます:
sudo apt install at

atパッケージがインストールされていない場合は、以下のコマンドでインストールします。

・「sudo apt install at」コマンドを実行します。

パスワードの入力が求められたら、パスワードを入力します。

user01@ubuntu-vm:~$ sudo apt install at
[sudo] user01 のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
提案パッケージ:
  default-mta | mail-transport-agent

以下のパッケージが新たにインストールされます:
  at
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 122 個。
41.1 kB のアーカイブを取得する必要があります。
この操作後に追加で 166 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/universe amd64 at amd64 3.2.5-1ubuntu1 [41.1 kB]
41.1 kB を 1秒 で取得しました (45.4 kB/s)
以前に未選択のパッケージ at を選択しています。
(データベースを読み込んでいます ... 現在 208899 個のファイルとディレクトリがインストールされています。)
.../at_3.2.5-1ubuntu1_amd64.deb を展開する準備をしています ...
at (3.2.5-1ubuntu1) を展開しています...
at (3.2.5-1ubuntu1) を設定しています ...
Created symlink /etc/systemd/system/multi-user.target.wants/atd.service → /lib/systemd/system/atd.service.
man-db (2.10.2-1) のトリガを処理しています ...

コマンドの使用例

1.atコマンドの実行

・「at now + 1 minute」コマンドを実行します。

まず、atコマンドを使用して、指定した時間にコマンドを実行します。

user01@ubuntu-vm:~$ at now + 1 minute
warning: commands will be executed using /bin/sh
at Mon Jul 15 01:43:00 2024

2.今から1分後に「Hello」を「test.txt」ファイルに保存するコマンドを登録

・「echo "Hello" > test.txt」コマンドを実行してジョブを登録し、「Ctrl」+「D」キーを入力して終了します。

atプロンプトが表示されたら、実行したいコマンドを入力します。

at> echo "Hello" > test.txt
at> <Ctrl+D> # 入力を終了してジョブを登録する
job 3 at Mon Jul 15 01:43:00 2024

3.atコマンドで予約されているジョブの確認

・「at -l」コマンドを実行します。

予約されているジョブのリストを表示します。

1	Mon Jul 15 01:43:00 2024 a user01

4.1分経過後、「test.txt」ファイルを確認

1分後に「test.txt」ファイルを確認します。

・「cat test.txt」コマンドを実行します

user01@ubuntu-vm:~$ cat test.txt
Hello

5.atコマンドで予約されているジョブの確認

・「at -l」コマンドを実行します。

再度、予約されているジョブのリストを表示します、何も表示されません。

ジョブが実行され、予約されているジョブがなくなったことが確認できます。

user01@ubuntu-vm:~$ at -l

6.今から3日後に「Hi」を「test.txt」ファイルに保存するコマンドを登録

・「at now + 3 days」コマンドを実行します。

次に、3日後に「Hi」と表示するジョブを登録します。

user01@ubuntu-vm:~$ at now + 3 days
warning: commands will be executed using /bin/sh
at Thu Jul 18 01:47:00 2024

atプロンプトでコマンドを入力します。

・「echo "Hi" > test.txt」コマンドを実行してジョブを登録し、「Ctrl」+「D」キーを入力して終了します。

at> echo "Hi" > test.txt
at> <Ctrl+D> # 入力を終了してジョブを登録する
job 5 at Thu Jul 18 01:47:00 2024

7.atコマンドで予約されているジョブの確認

・「at -l」コマンドを実行します。

再度、予約されているジョブのリストを表示します。

user01@ubuntu-vm:~$ at -l
2	Thu Jul 18 01:47:00 2024 a user01

8.atコマンドで予約されているジョブを削除

・「at -r 2」コマンドを実行します。

予約されているジョブを削除します。

user01@ubuntu-vm:~$ at -r 2

9.atコマンドで予約されているジョブの確認

・「at -l」コマンドを実行します。

再度、予約されているジョブのリストを表示します。何も表示されません。

ジョブが削除され、予約されているジョブがなくなったことが確認できます。

user01@ubuntu-vm:~$ at -l

10.この演習で作成したファイルを削除します。

・「rm test.txt」コマンドを実行し、「ls」コマンドで削除されたかどうかを確認します。

user01@ubuntu-vm:~$ rm test.txt
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック

まとめ

atコマンドは、特定の時刻に一度だけコマンドやスクリプトを実行するための便利なツールです。主なオプションには、ジョブの表示(-l)、削除(-r)、ファイルからの実行(-f)があります。具体的な使用例を通じて、atコマンドの基本的な使い方とその効果を理解できます。

オプション説明
-d ジョブ番号 または -r ジョブ番号指定したジョブ番号のジョブを削除します。
-l予約されているジョブのリストを表示します。
-f ファイル名指定したファイルの内容を実行します。
まとめ

 これにより、atコマンドを活用して、定期的なタスクの管理と自動化を効率的に行うことができます。