at は、特定の時間に実行されるコマンドをスケジュールできるコマンドラインユーティリティです。 atで作成されたジョブ 一度だけ実行されます。
この記事では、 atの使用方法について説明します。 およびそのコンパニオンユーティリティbatch 、 atq 、 atrm 後で実行するジョブを表示、削除、および作成します。
atをインストールしています #
ディストリビューションに応じて、 at Linuxシステムに存在する場合と存在しない場合があります。
atの場合 がインストールされていない場合は、ディストリビューションのパッケージマネージャーを使用して簡単にインストールできます。
-
atをインストールします UbuntuとDebianでsudo apt updatesudo apt install at -
atをインストールします CentOSとFedoraでsudo yum install at
プログラムをインストールしたら、 atdを確認してください。 、スケジューリングデーモンが実行されており、起動時に開始するように設定されています:
sudo systemctl enable --now atd atの使用方法 コマンド#
atの簡略化された構文 コマンドは次のとおりです:
at [OPTION...] runtime
at コマンドは日付と時刻を取ります( runtime )コマンドラインパラメータとしてジョブを実行する場合、および標準入力から実行するコマンド。
午前9時に実行されるジョブを作成しましょう:
at 09:00
Enterを押したら 、 atが表示されます ほとんどの場合、 at>で始まるコマンドプロンプト 。コマンドが実行されるシェルを通知する警告も表示されます:
warning: commands will be executed using /bin/sh
at>
実行するコマンドを1つ以上入力します:
tar -xf /home/linuxize/file.tar.gz
コマンドの入力が完了したら、 Ctrl-Dを押します。 プロンプトを終了してジョブを保存するには:
at> <EOT>
job 4 at Tue May 5 09:00:00 2020
このコマンドは、ジョブ番号と実行日時を表示します。
at にコマンドを入力する以外に、実行するコマンドを渡す方法は他にもあります。 促す。 1つの方法は、 echoを使用することです コマンドをatにパイプします :
echo "command_to_be_run" | at 09:00 別のオプションは、ヒアドキュメントを使用することです:
at 09:00 <<ENDcommand_to_be_runEND
標準入力の代わりにファイルからコマンドを読み取るには、 -fを指定してコマンドを呼び出します。 ファイルへのパスが続くオプション。たとえば、スクリプト /home/linuxize/script.shを実行するジョブを作成するには :
at 09:00 -f /home/linuxize/script.sh
デフォルトでは、コマンドが出力を生成する場合、 at ジョブが完了すると、出力を含む電子メールがユーザーに送信されます。 atを呼び出す -Mを使用 電子メール通知を抑制するオプション:
at 09:00 -M
-mを使用します 出力がない場合でもメールを送信するには:
at 09:00 -m バッチ コマンド#
バッチコード> またはそのエイリアスat-b システムの負荷レベルが許す限り、ジョブをスケジュールし、バッチキューで実行します。デフォルトでは、システム負荷平均が1.5未満のときにジョブが実行されます。 atd を呼び出すときに、負荷の値を指定できます。 デーモン。システム負荷の平均が指定されたものよりも高い場合、ジョブはキューで待機します。
batchを使用してジョブを作成するには 、実行するコマンドを渡します:
echo "command_to_be_run" | batch 実行時間の指定#
at ユーティリティは、幅広い時間仕様を受け入れます。時刻、日付、および現在の時刻からの増分を指定できます:
-
時間 -時刻を指定するには、
HH:MMを使用します またはHHMM形。 12時間の時間形式を示すには、amを使用します またはpm時間の後。nowのような文字列を使用することもできます 、真夜中、正午、またはteatime(16:00)。指定された時間が経過すると、ジョブは翌日に実行されます。 -
日付 -このコマンドを使用すると、特定の日付にジョブの実行をスケジュールできます。日付は、月の名前の後に日とオプションの年を続けて指定できます。
todayなどの文字列を使用できます 、明日、または平日。日付は、MMDD [CC] YYを使用して指定することもできます 、MM / DD / [CC] YY、DD.MM。[CC]YYまたは[CC]YY-MM-DDフォーマット。 -
インクリメント -
atnow + count time-unitの増分も受け入れます format、ここでcountは数値であり、time-unit次の文字列のいずれかになります:minutes、時間コード> 、日、または週。
時間、日付、増分を組み合わせることができます。いくつかの例を次に示します。
-
現在の時刻より10分遅い時刻に次の日曜日の仕事をスケジュールします:
at sunday +10 minutes -
今から2日後の午後1時に実行するジョブをスケジュールします。
at 1pm + 2 days -
2020年10月21日12:30に実行するジョブをスケジュールします:
at 12:30 102120 -
今から1時間後に実行するジョブをスケジュールします:
at now +1 hours
[[CC] YY] MMDDhhmm [.ss]で日時を指定することもできます -tを使用する オプション。次に例を示します:
at -t 202005111321.32
デフォルトでは、 atで作成されたジョブ aという名前のキューでスケジュールされます およびbatchで作成されたジョブ bでスケジュールされます キュー。
クエリにはaの名前を付けることができます zへ およびA Zへ 。低い文字のキューは低い快適さで実行されます。つまり、高い文字のキューよりも優先されます。
-qでキューを指定できます オプション。たとえば、 Lでジョブを設定するには キュー、実行します:
at monday +2 hours -q L 保留中のジョブの一覧表示#
ユーザーの保留中のジョブを一覧表示するには、 atqを実行します またはat-l コマンド:
atq 出力には、すべてのジョブが1行に1つずつ一覧表示されます。各行には、ジョブ番号、日付、時刻、キューレター、およびユーザー名が含まれています。
9 Tue May 5 12:22:00 2020 a linuxize
12 Wed Oct 21 12:30:00 2020 a linuxize
15 Tue May 5 09:00:00 2020 a linuxize
6 Tue May 5 09:00:00 2020 a linuxize
13 Mon May 4 23:08:00 2020 a linuxize
11 Wed Jul 1 10:00:00 2020 a linuxize
4 Tue May 5 09:00:00 2020 a linuxize
atqの場合 管理ユーザーとして呼び出されると、すべてのユーザーの保留中のジョブが一覧表示されます。
保留中のジョブの削除#
保留中のジョブを削除するには、 atrmを呼び出します またはat-r コマンドの後にジョブ番号が続きます。たとえば、番号9のジョブを削除するには、次のコマンドを実行します。
atrm 9 ユーザーの制限#
/etc/at.deny および/etc/at.allow ファイルを使用すると、 atでジョブを作成できるユーザーを制御できます。 またはbatch 指図。ファイルは、ユーザー名のリストで構成され、1行に1つのユーザー名が含まれます。
デフォルトでは、 /etc/at.denyのみ ファイルが存在し、空です。つまり、すべてのユーザーが atを使用できます。 指図。特定のユーザーへのアクセス許可を拒否する場合は、このファイルにユーザー名を追加します。
/etc/at.allowの場合 ファイルが存在するのは、このファイルにリストされているユーザーのみが atを使用できることです。 コマンド。
どちらのファイルも存在しない場合は、管理者権限を持つユーザーのみが atを使用できます。 コマンド。
結論#
at ユーティリティは、標準入力からコマンドを読み取り、後で実行します。 crontabとは異なり、 atで作成されたジョブ 一度だけ実行されます。
atで利用可能なすべてのオプションの詳細については コマンドタイプmanat ターミナルで。
ご不明な点がございましたら、お気軽にコメントをお寄せください。