at
は、特定の時間に実行されるコマンドをスケジュールできるコマンドラインユーティリティです。 at
で作成されたジョブ 一度だけ実行されます。
この記事では、 at
の使用方法について説明します。 およびそのコンパニオンユーティリティbatch
、 atq
、 atrm
後で実行するジョブを表示、削除、および作成します。
at
をインストールしています #
ディストリビューションに応じて、 at
Linuxシステムに存在する場合と存在しない場合があります。
at
の場合 がインストールされていない場合は、ディストリビューションのパッケージマネージャーを使用して簡単にインストールできます。
-
at
をインストールします UbuntuとDebianでsudo apt update
sudo 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 <<END
command_to_be_run
END
標準入力の代わりにファイルからコマンドを読み取るには、 -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
フォーマット。 -
インクリメント -
at
now + 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
ターミナルで。
ご不明な点がございましたら、お気軽にコメントをお寄せください。