Linuxの「at」コマンドでタスクを予約実行する方法|インストールから応用テクニックまで
初めてアクセスの多いサーバーを管理していた頃、ユーザーが誰もいない時間を見計らってサーバーを再起動する必要がありました。観察してみると、そのタイミングは深夜3時頃でした。「こんなに不便なことはない。再起動のためだけに夜中に起きるなんて…」と思ったのですが、5秒後にはすぐに気づきました。「これはLinuxだ。こんな単純な作業なら簡単に自動化できるはずだ」と。こうしてatコマンドとの出会いが訪れたのです。
atは非常に使いやすいユーティリティです。日付と時刻をコマンドライン引数として渡し、その後に実行したいコマンドを1つ以上入力するだけです。
サーバー環境では、無人での操作が必要になる場面が多いため、このようなツールがあると非常に便利です。しかしデスクトップ環境でもatは活躍します。例えば、大容量ファイルをダウンロードするとき、深夜にPCを自動シャットダウンするようスケジュールできます。また、やるべきことをリマインドさせることも可能です。適切なツールとオプションを組み合わせれば、思いつくほとんどの操作をスケジュールできます。
各Linuxディストリビューションへの「at」のインストール方法
DebianおよびDebianベースのディストリビューションでは、以下のコマンドを実行します。
sudo apt install at

Fedoraの場合:
sudo dnf install at
Arch Linuxの場合:
sudo pacman -S at
openSUSEの場合:
sudo zypper install at
「atd」デーモンの自動起動を有効化する
ディストリビューションによっては、「at」デーモンの起動時に自動有効化されるものとされないものがあります。以下のコマンドで確認できます。
systemctl is-enabled atd.service

結果が「disabled」と表示された場合は、次のコマンドで有効化します。
sudo systemctl enable atd.service
続いて、デーモンを起動します。
sudo systemctl start atd.service
「at」コマンドの日時指定方法
日時は以下のいずれかの形式で指定できます。
1. 指定した分数・時間・日数・週数後に実行
at now + 10 minutes at now + 10 hours at now + 10 days at now + 10 weeks

2. 正確な時刻を指定して実行
at 23:10
たとえば現在が12:00で、次のように入力した場合:
at 11:00
この場合、コマンドは翌日の指定時刻に実行されます。
3. 正確な日時を指定して実行
at 12:00 December 31
その他の日時指定方法については、オンラインマニュアル(man at)を参照してください。
「at」コマンドの基本的な使い方
スケジュール時刻を指定すると、下図のようなプロンプトが表示されます。

ここでは、実行したいコマンドを入力するだけです。これらのコマンドは現在ログインしているユーザーの権限で実行されます。指定時刻に実行したいコマンドを入力してEnterキーを押し、さらにコマンドを追加したい場合は同じ手順を繰り返します。入力が完了したらCtrl+Dを押してください。<EOT>と表示され、その後にコマンドの実行予定時刻が示されます。
root権限が必要なコマンドを実行する場合
root権限が必要なコマンドを実行したい場合は、sudoを使わないでください。コマンドは無人で実行されるため、パスワードを入力できる人がおらず、sudoは機能しません。代わりに、まずrootユーザーとしてログインします。
sudo -i
その後、通常どおり「at」コマンドを使用すれば、すべてのコマンドが一般ユーザーではなくroot権限で実行されます。
コマンドのスケジュール登録が完了したら、次のコマンドでrootアカウントからログアウトします。
exit

上のスクリーンショットの例では、2分後にシャットダウンするようスケジュールされています。用途に合わせて自由にカスタマイズできます。
電源オフ時の動作について
予約済みジョブの実行前にコンピューターの電源が切れていた場合、時間が経過していれば次回の起動時に実行されます。例えば15時にジョブを予約し、14時にシャットダウン、16時に電源を入れた場合、そのジョブは16時に実行されます。
予約済みジョブの確認と削除
キューに入っているジョブは以下のコマンドで確認できます。
atq
または
at -l

特定のジョブに登録されているコマンド内容を確認するには、ジョブ番号を指定します。
at -c 22

出力の最後の方に、予約したコマンドが表示されます。
ジョブを削除するには、同様にジョブ番号を指定します。
atrm 22
GUIアプリケーションをスケジュール実行する方法
まず、現在のディスプレイ変数の値を確認します。
echo $DISPLAY
通常は:0と表示されます。
次にatでスケジュールを作成し、プロンプト内でDISPLAY変数に先ほど確認した値を設定し(export DISPLAY=:0)、実行したいグラフィカルアプリケーションを指定します。

このスクリーンショットで使ったコマンドを実行すると、次のような結果になります。

これでGUIアプリが画面にポップアップ表示され、スマートフォンのアラームよりも効果的に重要なタスクを思い出させてくれるでしょう。
まとめ
「at」の使用自体はとても簡単です。難しいのは、自分の目的に合ったクリエイティブな使い方を考えることかもしれません。ダウンロードの開始、プログラムの終了、スタンバイモードへの移行など、アイデア次第でさまざまな操作を自動化できます。ぜひ日常の定型作業の効率化に役立ててください。
-
Linux上でAndroid-x86とVirtualBoxを使ってAndroidゲームを楽しむ方法
この記事では、Linux上で仮想マシンを活用しながら、お気に入りのAndroidゲームを楽しむ方法を紹介します。Androidスマートフォンをお持ちなら、その中の面白いゲームにハマっている方も多いのではないでしょうか。あるいは、スマホでしか動かないアプリを使いたいというケースもあるかもしれません。そんなとき、ふとこう考えたことはありませんか?――「このゲームやアプリをデスクトップPCでも動かせたらいいのに」と。話をシンプルにするため、ここでは対象をAndroidで動作するアプリケーションに絞って説明します。解決策の一つは、PC上でAndroidエミュレータを実行することです。しかしAndroi
-
先延ばしグセを克服!スマホで使えるおすすめ集中アプリ5選
私たちは日常のさまざまな場面で、ついSNSアプリを開いてしまいがちです。スマートフォンは生活に欠かせない存在となりましたが、やるべき作業を後回しにする原因になっていることも少なくありません。 物事を先延ばしにする癖は大きな問題であり、この習慣があると目標達成は遠のいてしまいます。スマホの利用が増えた現代では、この傾向はさらに顕著になっています。しかし興味深いことに、解決策もまたスマホの中にあります。先延ばし癖を克服するためのアプリが数多く存在するのです。 スマホへの依存は、家族や友人と過ごす時間の大切さを見失わせるほど私たちを変えてしまいました。だからこそ、この習慣を断ち切り、時間をより賢く使