GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでの使い捨てcronジョブにatを使用する

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を始めましょう。 ]

パイプ

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システム管理コースの受講を検討してください。 ]


Linux
  1. Linux で Cron を使用してシステム ジョブを定義する

  2. Linux 用 SQLCMD での変数の使用

  3. CRON ジョブを使用して URL にアクセスしますか?

  1. cronを使用してタスクをスケジュールするためのLinuxのヒント

  2. Linuxパッケージ管理のためのAppImageの使用

  3. Cron Job:初心者向けの包括的なガイド2022

  1. Linux の jobs コマンド オプション

  2. Linux:フォアグラウンドで cron ジョブを実行する

  3. cron ジョブを使用してログ ファイルを削除する