はじめに
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
