Cron  コンピュータの世界で最も有名なUNIXismの1つです。 Linuxサーバーを管理していないIT担当者でさえ、その謎の獣、「cronジョブ」について聞いたことがあるでしょう。また、Linux管理者は、cronジョブが際限なく役立つことを知っています。実際、 cronは議論の余地があります システムは、自動化ブームの初期の先駆者でした。人間が忘れることができるとわかっていることがあれば、 cron  答えでした。
 ただし、 cron  優れているのは繰り返しであり、1時間ごと、毎日、または毎週実行するためのジョブが必要ない場合もあります。スケジュールどおりに実行する必要があるのはジョブだけであり、アラームを設定して自分自身を思い出させるのは、UNIXの方法とは思えません。必要なのはat コマンド、 atで実行するようにスケジュールされたジョブのキューを作成するために使用できる小さなユーティリティ 将来の特定の時間。
セットアップ
  atを使用する前に コマンドを実行するには、いつか起動するシェルスクリプトが必要です。いつものように、スクリプトのファイルの先頭に「マジッククッキー」または「シバン」の行を入れて、実行に使用するシェルを設定する必要があります。
この例では、ファイルを作成する簡単なスクリプトを作成します。  / tmp  :
#!/bin/sh
DATE=`date --utc +%s`
echo "hello world $DATE" | tee /tmp/at.log
exit 0 スクリプトを実行可能にしてから、テストを実行します。
$ chmod +x test.sh
$ ./test.sh 
  /tmp/at.logの内容を表示する 作成したスクリプトをファイルします:
$ cat /tmp/at.log
hello world 1588482185 ジョブのスケジュール
 タイムスタンプまたは自然言語を使用してジョブをスケジュールできます。自然言語または単純な時間形式を使用する場合は、時間を指定する前にオプションは必要ありません。
たとえば、 test.shをスケジュールする場合 すぐに実行するには、キーワード nowを使用するだけです。 :
$ at now -f test.sh
warning: commands will be executed using /bin/sh
job 1 at Mon Feb 24 01:23:00 2020
$ cat /tmp/at.log
hello world 1588482620 
 今からのオフセットを設定できます  minutesを使用する 、時間コード> 、日 、週 、または years  。
$ at now + 1 day -f test.sh
warning: commands will be executed using /bin/sh
job 2 at Tue Feb 25 01:27:00 2020 
 年コード> キーワードは文書化されておらず、 seconds  サポートされていません。  midnightなどの一般的な時刻も指定できます 、正午 、および teatime  (16:00です)
単純な時間も機能します:
$ at 21:12 -f test.sh
warning: commands will be executed using /bin/sh
job 3 at Mon Feb 24 21:12:00 2020 
 特定の時刻にカレンダーの日付をスケジュールするには、 -tを使用する必要があります オプションおよびPOSIX準拠の時間形式。たとえば、YYYYMMDDHHMM形式を使用します。
$ at -t 202003141509 -f test.sh
warning: commands will be executed using /bin/sh
job 4 at Sat Mar 14 15:09:00 2020 [より高度なシステム自動化をお探しですか? RedHatの無料の本であるTheAutomatedEnterpriseを始めましょう。 ]
パイプP>
  atにコマンドを送信できます UNIXパイプ経由:
$ echo "hello world" > /tmp/at.log | at now
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:28:00 2020
$ cat /tmp/at.log
hello world バッチジョブ
 バッチ コマンド(または at -b  )システムリソースが許す限り早くコマンドを実行します。システムの負荷が高い場合は、 batchを使用できます CPUサイクルに余裕がある場合に、実行するジョブをキューに入れます。
$ echo "Cycles to spare" > /tmp/at.log | batch
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:31:00 2020 キューの表示
  atq  コマンドはatを表示します 列。これにより、ジョブID、各ジョブの実行がスケジュールされている時間、各ジョブがグループ化されているキュー( a )がわかります。  atの場合 キューまたはb  batchの場合 queue)、およびキュー所有者のユーザー名。  atq を実行している場合を除き、通常、キューの所有者は自分自身です。 ルートとして。この場合、すべてのユーザーの atが表示されます。 キュー。
$ atq 
2   Tue Feb 25 01:27:00 2020  a  seth
3   Mon Feb 24 21:12:00 2020  a  seth
4   Sat Mar 14 15:09:00 2020  a  seth
5   Mon Feb 24 01:31:00 2020  b  seth 
 任意の単一文字c-zを使用して、独自のキューを作成して名前を付けることができます またはA-Z 。両方のa およびb  atの予約済み指定です およびbatch 、および大文字のキューはすべて batchとして扱われます 仕事。  aのアルファベット順に続く名前のキュー およびb ますます快適に実行されます。
仕事のプレビュー
 コマンドまたはスクリプトをatに送信する場合 、現在の作業ディレクトリ、環境( BASH_VERSINFO を除く) 、 DISPLAY  、 EUID  、 GROUPS  、 SHELLOPTS  、 TERM  、 UID  、および _  )、およびumaskは保持されます。コマンドで特定の環境設定が必要な場合は、コマンドを atに渡すときにそれらを設定する必要があります。 または、スクリプトでそれらをオーバーライドします。
 コマンドがどのように実行されるかを確認するには、 -cを使用します オプションとジョブ番号:
$ at -c 4
#!/bin/sh
# atrun uid=1006 gid=1006
# mail seth 0
umask 22
CPLUS_INCLUDE_PATH=/usr/lib64/qt/include; export CPLUS_INCLUDE_PATH
MANPATH=/usr/local/man:/usr/man:/usr/lib64/adoptopenjdk12.0.2/man; export MANPATH
KDE_MULTIHEAD=false; export KDE_MULTIHEAD
[...] ジョブの削除
  atから保留中のジョブを削除できます  atrmを使用してキューに入れる コマンドとジョブID。ジョブIDがわからない場合は、 atqを使用してください 最初にキューを表示します。
$ atq 
6   Fri Jan 01 00:00:00 2038  a  seth
$ atrm 6
$ atq atでのスケジューリング
  at  コマンドは、より小さな cronに少し似ています システム。 1回限りのコマンド実行に便利で使いやすいです。  cronを使用している場合 またはsleep コマンドの実行時間を相殺するには、 atを見てください。 およびbatch 。
[Linuxシステム管理についてもっと知る必要がありますか? RedHatシステム管理コースの受講を検討してください。 ]