Linuxのatコマンドを使用して、通常のスケジュールで実行されないジョブをスケジュールできます。
Atは、LinuxのCrontabの概念と比較できます。これは、定期的なタスクを自動化するためのより良い方法です。
このチュートリアルでは、「atコマンド」を使用して、将来の特定の時間に実行中のタスクとコマンドをスケジュールする方法を示します。
Linuxでのatコマンドのインストール
開始する前に、「at」がシステムにインストールされているかどうかを確認する必要があります。デフォルトでは、すべてのオペレーティングシステムにインストールされているわけではありません。
次のように入力して確認できます:
at -V
ソフトウェアがすでにインストールされている場合は、バージョン番号が返されます。そうでない場合は、次のように入力してDebianベースのシステムにインストールできます。
sudo apt install at
別のLinuxディストリビューションを使用している場合は、ディストリビューションで使用されているパッケージマネージャーを反映するようにこのコマンドを変更する必要がある場合があります。
「atユーティリティ」は、実際には、ジョブをスケジュールするために連携して機能する一連のコマンドです。すでに述べたように、 at タスクが定期的なイベントというよりも「1回限り」の場合に適しています。
atに関連するいくつかの基本的なコマンドを使用してテーブルを作成しました 。
コマンド | 関数 |
---|---|
at | ユーザーがタスクをスケジュールできるようにします |
atq | ログインしたユーザー、またはsudoとして実行されている場合はすべてのユーザーのキューに入れられたジョブを一覧表示します |
atrm | 指定したジョブ番号でジョブを削除します |
バッチ | システムの負荷が特定のレベル(負荷平均<1.5)の場合にのみ、指定された時間にジョブを実行するようにシステムに指示します |
[ctrl + a] +? |
Linuxでジョブをスケジュールするためにatコマンドを使用する
atを使用する 独自のフォーマットがあります。ジョブをスケジュールするときは、端末に次のように入力します。
at [time] [date/day]
時間は必須ですが、日付はオプションです。何も入力されていない場合は、現在の日付とシステム時刻に基づいて推測されます。
Enterキーを押すと、コマンドを入力するように求められます。いくつでも入力できます。 「ctrl+d」と入力して保存し、終了します。
例を挙げてお見せしましょう。
例1:自然言語を使用して時間/日付を入力する
時間の入力にはさまざまなオプションがあります。ややトリッキーなアスタリスクベースのシステムを備えたcrontabとは異なり、「at」は「人間」の入力をより効率的に認識します。
ソフトウェアで理解できる人間のような表現はたくさんあります。これらの多くはロケール固有です。 「真夜中」や「正午」などの一般的な表現を認識できます。また、AMとPMを区別することもできます。同様に、略語を含む、曜日と日付のさまざまな形式を認識できます。
「今」という表現も活用できます。以下のようにコマンドを入力するだけで、5分でコマンドが実行されます。
at now + 1 minutes
[email protected]:~$ at now + 1 min
warning: commands will be executed using /bin/sh
at> echo "Look at you, using at like a champ!" > message.txt
at> <EOT>
job 8 at Mon Jan 6 02:59:00 2020
bin / shに関する警告はほとんど無視できます。 。別のシェルを使用している場合は、頭痛の種になる可能性があります。 Linuxディストリビューションの大部分には、「sh」としてシンボリックリンクされたシステムシェルとしてbashが付属しています…これは長い話です。
それで、それは約1分ですよね?ディレクトリで新しいファイルを確認してください。
テキストを含む「message.txt」というファイルが必要です。
[email protected]:~$ ls m*
message.txt
見た目は良さそうですが、メッセージを適切にキャプチャしましたか?ファイルの内容を見てみましょう:
[email protected]:~$ cat message.txt
Look at you, using at like a champ!
例2:指定された日時の使用
最初の仕事では、「相対」時間「今+[時間]」を使用しました。これは、ジョブをスケジュールするための非常に簡単な方法ですが、より具体的にすることをお勧めします。
今回は、異なる時間に2つのジョブをスケジュールしましょう。
デモにはmessage.txtファイル(前の例で作成)を使用できます。各ジョブはファイルの内容を置き換えます。
Linuxシステムの現在時刻はdateコマンドで確認できます。
特定の時間(今から5分後)に最初のジョブを設定します:
[email protected]:~$ at 3:45
warning: commands will be executed using /bin/sh
at> echo "5 minutes later..." > message.txt
at> <EOT>
job 11 at Mon Jan 6 03:45:00 2020
特定の時間(今から10分後)に2番目のジョブを設定します:
[email protected]:~$ at 3:50
warning: commands will be executed using /bin/sh
at> echo "10 minutes later..." > message.txt
at> <EOT>
job 12 at Mon Jan 6 03:50:00 2020
3:45に確認:
[email protected]:~$ cat message.txt
5 minutes later...
3:50に確認:
[email protected]:~$ cat message.txt
10 minutes later...
例3:キューに入れられたすべてのジョブをatqで表示
atqコマンドを使用して、いつでもスケジュールされたジョブを確認できます。ログインしているユーザーに対して現在スケジュールされているすべてのジョブが一覧表示されます。システム上のすべてのジョブを表示するには、昇格された特権を使用する必要がある場合があります。
[email protected]:~$ atq
11 Mon Jan 6 03:45:00 2020 a christopher
12 Mon Jan 6 03:50:00 2020 a christopher
各ジョブは、ジョブID、そのスケジュールされた時間、および関連付けられたユーザーによって識別されます。
-cオプションを使用して、スケジュールされたジョブのコンテンツを表示することもできます:
at -c jobnumber
例4:atrmを使用してスケジュールされたジョブを削除する
実行前にジョブをキャンセルする場合は、コマンドに続けて対応するジョブID(atqコマンドで取得できます)を入力することでキャンセルできます。
[email protected]:~$ atrm 11
[email protected]:~$ atq
12 Mon Jan 6 03:50:00 2020 a christopher
ご覧のとおり、ジョブ11はキューから削除されました。
例5:atコマンドにファイルを使用する
不定期に実行したい一連のスクリプトがあり、cronが適切ではない可能性があります。標準入力を使用せずに複数のジョブを入力できます。
HRが、作業ポリシーに違反していると信じている従業員のコンピューター活動に関する文書を要求するシナリオを想像してみましょう。特定のアクティビティログまたはその他の履歴情報を使用して、指定した時間にレポートを生成することができます。
で実行するテキストファイルに必要なスクリプトをリストすることで、時間を節約できます。
[email protected]:~$ cat problem_employee_logs.txt
path/to/get_browsing_history.sh
/whatever/path/get_activity_logs.sh
あなたはその考えを理解します。これで、「at」コマンドに-fを追加し、次のようにファイル名を含めることができます。
[email protected]:~$ at now + 2 minutes -f problem_employee_logs.txt
warning: commands will be executed using /bin/sh
job 16 at Mon Jan 6 05:42:00 2020
例6:CPU負荷がしきい値を下回ったときにジョブを実行する
バッチジョブは、CPU負荷の平均がデフォルトで1.5を下回ると実行されます。
batch
バッチジョブを入力する方法は、「 at」と同じです。 ‘、ただし、指定する時間が必要ない場合を除きます。
負荷しきい値を変更する場合は、次のコマンドを使用して変更できます。
atd -l [n]
ここで、nは選択する負荷しきい値です。マニュアルページでは、n-1より大きく変更することをお勧めします。nはシステム内のCPUの数です。
結論
読んでくれてありがとう。 atコマンドの理解が深まったことを願っています。ご不明な点がある場合、またはこのコマンドの使用方法を共有したい場合は、お知らせください。以下にコメントを残してください。