はじめに
at commandは、後で実行するためにジョブをスケジュールするために使用されるLinuxコマンドラインユーティリティです。ユーティリティは、標準入力からコマンドを読み取り、それらを atにグループ化します。 一度だけ実行されるジョブ。
atの代替 cronジョブです。ただし、 at ジョブは1回だけ実行され、cronジョブは定期的なイベントです。
このチュートリアルでは、 atの使用方法を学習します コマンドを実行し、コマンドスケジューリングの便利な例を参照してください。
前提条件
- Linuxを実行しているシステム。
- sudo権限を持つユーザーアカウント。
atコマンドをインストール
使用しているLinuxディストリビューションに応じて、 at コマンドがプリインストールされていない可能性があります。
atかどうかを確認します ターミナルにコマンド名を入力してインストールします:
ユーティリティがプリインストールされていない場合、出力メッセージには Command'at' not foundと表示されます。 。
UbuntuとDebianにインストール
以下の手順に従って、 atをインストールします UbuntuまたはDebianの場合:
1.パッケージリポジトリを更新します:
sudo apt update
2. atをインストールします 実行によるコマンド:
sudo apt install at CentOSおよびFedoraにインストール
以下の手順に従って、 atをインストールします CentOSまたはFedoraの場合:
1.パッケージリポジトリを更新します:
sudo yum -y update
2.次のコマンドを実行して、 atをインストールします :
sudo yum install at スケジューリングデーモンを有効にする
スケジューリングデーモンはバックグラウンドで実行され、スケジュールされたジョブを時間どおりに実行します。
at をインストールした後、次のコマンドを実行します atdを有効にするパッケージ デーモンをスケジュールし、システムの起動時に起動するように設定します。
sudo systemctl enable --now atd
Linuxのコマンド構文とオプション
atの構文 コマンドは次のとおりです:
at [option] runtime
オプションを使用すると、スケジュールされたジョブを表示または削除したり、 atをカスタマイズしたりできます。 コマンドジョブスケジューリング。利用可能なオプションは次のとおりです。
| オプション | 説明 |
|---|---|
-V | プログラムのバージョン番号を標準出力に出力します。 |
-q [queue] | 指定された[queue]を使用します aの範囲の1文字で構成されます - z およびA - Z 。 a キューはatのデフォルトです およびb キューはbatchのデフォルトです 。より高い文字のキューは、より快適に実行されます。 大文字でキューにジョブを送信すると、ジョブは バッチに送信されたものとして扱われます。 。 バッチ 負荷平均ルールは、ジョブを実行する時間になると適用されます。 atqへのキューの指定 そのキューで保留中のジョブのみが表示されます。 |
-m | 出力がなかった場合でも、ジョブの完了後にユーザーに電子メールを送信します。ジョブをスケジュールしたユーザーに設定済みのメールアドレスが必要です。 |
-f[ファイル] | 指定された[file]からジョブを読み取ります 標準入力からではなく。 |
-b | バッチのエイリアス 。ジョブをスケジュールし、バッチで実行します システム負荷レベルの平均が1.5未満の場合はキューに入れます。 |
-l </ code> | atqのエイリアス 。ユーザーの保留中のジョブを一覧表示します。ユーザーがスーパーユーザーの場合、すべてのユーザーの保留中のジョブを一覧表示します。 |
-d | atrmのエイリアス 。ジョブ番号で識別される、スケジュールされたジョブを削除します。 |
-v | ジョブを読み取る前のジョブ実行時間を表示します。時間形式はThu Feb 20 14:50:00 1997 。 |
-c | 指定されたジョブをキャットし、その内容を標準のコマンドライン出力に表示します。 |
-t [time_arg] | [time_arg]で指定された時間にジョブをスケジュールします 口論。受け入れられる時間形式は[[CC] YY] MMDDhhmm 。 |
[runtime] 時間表現
絶対時間式またはジョブ設定時間に相対的な時間式を使用してジョブをスケジュールします。
利用可能な絶対時間表現 は:
-
YYMMDDhhmm [.ss]。 年、月、日、時、分、およびオプションで秒の省略形を指定します。 -
CCYYMMDDhhmm [.ss]。 通年、月、日、時、分、およびオプションで秒を指定します。 今。 現在の日時と即時実行を示します。真夜中。 00:00AMを示します。正午。 午後12時を示します。ティータイム。 午後4時と解釈されます。-
AM。 午後12時より前の時刻を示します。 -
PM。 午後12時以降の時刻を示します。 今日。 当日。明日。 当日の翌日。
たとえば、次のコマンドは、午後5時にエコーコマンドの呼び出しをスケジュールします。
echo "hello" | at 5PM
相対時間式を指定します プラス記号を追加する( + )、金額、および次のいずれか:
分時間日週月年
明日などの時間表現を使用する または火曜日 、現在の時刻にそれらの日にジョブをスケジュールします。さらに、 +を使用して時間を指定します キャラクター。
たとえば、次のコマンドは echoをスケジュールします ジョブをスケジュールしてから5分後のコマンド呼び出し:
echo "hello" | at now +5 minutes 環境
シェル 環境変数値は、 at のシェル(bash、zshなど)を決定します コマンドはジョブの実行に使用します。ジョブをスケジュールするとき、コマンドは実行中に使用するシェルをユーザーに警告します。
Linuxのコマンド例
次のセクションでは、便利な atについて説明します。 コマンドの例。
インタラクティブにジョブをスケジュールする
at コマンドを使用すると、インタラクティブな atを使用してジョブをスケジュールできます。 促す。次の構文を使用してインタラクティブプロンプトを開きます。
at [runtime] インタラクティブプロンプトでは、指定した時間に実行するコマンドを入力できます。このコマンドは、コマンドが使用するシェルを示す警告も出力します。
インタラクティブプロンプトを終了し、 Ctrl + Dを押してスケジュールされたジョブを保存します 。 Ctrl + Cでジョブをキャンセルします 。
例:
上記の例では、午後5時にジョブをスケジュールしました。これにより、インタラクティブプロンプトが開きます。スケジュールされたジョブは、 echoを実行することです コマンドを実行すると、ユーティリティは標準のbashシェルを使用します。
ジョブをパイプで送信
インタラクティブなatなしでジョブをスケジュールする コマンドをatにパイプすることでプロンプトを表示します ランタイムを指定します。 echoを使用する またはprintfを使用して、コマンドを atに渡します。 。
例:
echo "command_to_run" | at [runtime]
atをスケジュールするには echoを送信するジョブ ファイルへのコマンド出力には、次を使用します:
echo "hello" >> example.txt | at now catコマンドを使用してファイルが存在するかどうかを確認し、ジョブが実行されたことを確認します。
cat example.txt
スケジュールされたジョブを表示する
-c オプションは、以前にスケジュールされたジョブの内容を表示します。このオプションは、仕事の内容を忘れた場合や、予定されている時間を確認したい場合に便利です。
スケジュールされたatの内容を参照してください 次の構文を使用したジョブ:
at -c [job_number]
atq を実行して、ジョブ番号を取得します 最初にコマンドを実行して、保留中のすべてのジョブを一覧表示します。
例:
上記の例では、最初に保留中のすべてのジョブのリストを要求してジョブ番号を取得し、次にジョブ14の内容を標準出力で表示しました。
スケジュールされたジョブのリスト
at ユーティリティを使用すると、キューに残っていて実行を保留しているジョブを確認できます。保留中のジョブを確認するには、次の2つの方法があります。
-
atqを実行します コマンド。 -
-lを使用します オプション。
例:
at -l
出力には、現在のユーザーの保留中のジョブ番号、日付、時刻、年、およびキューが表示されます。すべてのユーザーの保留中のジョブを一覧表示するには、 sudoを指定してコマンドを実行します 。
sudo atq
上記の例では、 atqを実行しています 現在のユーザーの保留中のジョブのみを表示します。 atqを実行しています sudoを使用 すべてのユーザーの保留中のジョブを表示します。
実行時に電子メール通知を送信する
at ユーティリティは、デフォルトで完了したジョブに関する電子メール通知を送信します。電子メール通知には、ユーザーアカウント用に構成された有効な電子メールアドレスが必要であり、システムは電子メールを送信できる必要があります。
atに指示するには 出力がない場合でも、ジョブの完了時に電子メール通知を送信するには、 -mを指定します オプション。
例:
rm example.txt | at -m tomorrow
上記のコマンドは、明日の現在の時刻にジョブをスケジュールします。完了すると、 at ユーティリティは、ユーザーに設定されたメールアドレスを使用してユーザーに通知します bosko 。
通知せずにジョブを実行する
完了したジョブに関するメール通知を受け取らないようにするには、 -Mを指定します atをスケジュールするときのオプション 仕事。
例:
echo "shutdown -h now" | at -M 00:00
上記の例では、システムのシャットダウンを深夜にスケジュールし、 -Mを使用しました。 ユーティリティが電子メール通知を送信しないようにするオプション。
スケジュールされたジョブを削除する
スケジュールされたatを削除するには ジョブの場合は、 -rを指定します オプションを選択するか、 atrmを実行します コマンドとジョブID。 atqを実行してジョブIDを取得します または-lを利用する オプション。
次の例では、ジョブ12を削除しました:
ユーザーを制限する
at パッケージは2つのファイルを使用してatを制限します およびバッチ コマンドアクセス:
-
/etc/at.allow -
/etc/at.deny
ファイルを編集して、特定のユーザーのみが保留中の at を作成、削除、または表示できるようにします 仕事。ファイルは、 atにアクセスできるユーザー名とアクセスできないユーザー名のリストです。 コマンド。ユーザー名は改行文字で区切られ、空白は使用できません。
重要 : /etc/at.allowの場合 ファイルが存在する場合、そのファイルにリストされているユーザーのみが atを使用できます。 またはbatch 、および /etc/at.deny ファイルは無視されます。 /etc/at.allowの場合 ファイルが存在しません。/etc/at.denyにリストされているユーザー atの使用は許可されていません またはbatch 。 rootユーザーはいつでもatを実行できます アクセス制御ファイルに関係なく、コマンド。
/etc/at.denyを編集します atへのユーザーアクセスを拒否するsudo権限を持つファイル コマンド。次の例では、viエディターを使用してファイルを編集しました。
sudo vi /etc/at.deny
リストにユーザー名を追加した後、 atを実行します 制限付きユーザーアカウントを使用してコマンドを実行すると、次のメッセージが表示されます。
システムの負荷が許可されたときにジョブを実行する
バッチ コマンド( -b オプション) atをスケジュールします システム負荷の平均が1.5を下回ったときに実行するジョブ。システム負荷が低いときにジョブを実行すると、すべてのシステムリソースの消費が防止され、最適なシステム操作が保証されます。
たとえば、次のジョブは、システムの負荷が1.5を下回るとすぐに実行されます。
batch
echo "Hello world!" >> hello.txt