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

毎分よりも頻繁に cron ジョブを実行できますか?

解決策 1:

最もクリエイティブな候補者 誤用 Linux コマンドの:

nohup watch -n 30 --precise yourprog >/dev/null &

yourprog の場合 構成:

date +%M.%S.%N >> yourprog.out

次に yourprog.out 次のようになります:

50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676

かなり良いレベルの精度を示しています。

コマンドの各部分の説明は次のとおりです:

  • nohup - これは、それに続くコマンド watch を保持します この場合、端末の終了時に終了しないようにします。
  • watch - このプログラムは、コマンドを繰り返し実行します。通常、watch のたびに、コマンドからの出力の最初の画面が表示されます。 コマンドを実行します。
  • -n 30 - コマンドを実行する間隔。この場合、30 秒ごとです。
  • --precise - このオプションがない場合、watch にコマンドを実行します 間隔 秒。これにより、コマンドの各開始開始 オン できれば間隔。例でこのオプションが指定されていない場合、コマンドの起動と実行に時間がかかるため、時間は毎回 30 秒以上遅くなります (yourprog)。 ).
  • yourprog - watch のプログラムまたはコマンド ライン 実行します。コマンド ラインにシェル固有の文字 (スペースやセミコロンなど) が含まれている場合は、引用符で囲む必要があります。
  • >/dev/null - 大なりは、watch によって実行されているコマンドの出力をリダイレクトします。 ファイルへ /dev/null .そのファイルは、書き込まれたデータをすべて破棄します。これにより、出力が画面に書き込まれたり、 nohup 以降 が使用されている場合、出力が nohup.out というファイルに送信されなくなります .
  • & - watch コマンドはバックグラウンドで実行され、制御は端末または親プロセスに返されます。

nohup に注意してください 、出力のリダイレクトと & バックグラウンド制御演算子は watch に固有のものではありません .

yourprog の例の説明は次のとおりです。 スクリプト:

  • date - 現在の日付および/または時刻を出力します。それらを設定することもできます。
  • +%M.%S.%N - date の出力形式を指定します 使用する。 %M 現在の分、%S は現在の秒で、%N 現在のナノ秒です。
  • >> yourprog.out - date の出力をリダイレクトします コマンドを yourprog.out というファイルに .二重大なりにより、以前の内容が上書きされるのではなく、呼び出しごとに出力がファイルに追加されます。

編集 :

悪用される可能性がある (または正当な使用である) 別の可能性があるのは、systemd タイマーです。

cron の代替としての systemd/Timers および Cron と systemd タイマーを参照してください。

すぐに例を投稿しようと思います.

解決策 2:

タスクを頻繁に実行する必要がある場合、cron は不適切なツールです。それほど頻繁にジョブを起動しないという事実は別として、ジョブの実行に起動間隔よりも長い時間がかかる場合、深刻な問題が発生するリスクもあります。デーモン化して永続的に実行するようにタスクを書き直し、必要に応じて cron から起動します (既に実行されている場合は再起動しないように注意してください)。

解決策 3:

Cron は 1 分ごとに起動するように設計されているため、ハッキングなしでは実行できません。たとえば、あなたが言及したようなスリープです。

解決策 4:

* * * * * /path/to/program
* * * * * sleep 30; /path/to/program

前のインスタンスが既に実行されている場合にプログラムが終了するように、プログラムに何かを記述することを忘れないでください。

#!/bin/sh

if ln -s "pid=$$" /var/pid/myscript.pid; then
  trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
  echo "Already running, or stale lockfile." >&2
  exit 1
fi

もちろん、これでも失敗する可能性は非常に小さいため、Google で検索して、環境に適したより良い解決策を見つけてください。

解決策 5:

サードパーティのソフトウェアでこれを行うことができます。

私にとってうまくいったオプションは、frequent-cron です

ミリ秒単位の精度が可能で、現在の実行が終了するまで次の実行を延期するオプションが提供されます..


Linux
  1. Cronjobs を 1 分間に 1 回以上実行する方法は?

  2. Linux で 6 時間ごとに cron ジョブを実行する

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

  1. 1 分ごとの cron.d ジョブが実行されないのはなぜですか?

  2. 3か月ごとにcronジョブを実行する方法は?

  3. 2 日ごとの午後 11 時に cron ジョブを実行するように設定する方法

  1. PHPスクリプトが実行されているかどうかを確認するためのcronジョブ、実行されていない場合は実行しますか?

  2. 1 時間ごとに実行可能ファイルを実行するように cron ジョブを設定する方法は?

  3. 毎日特定の時間にcronジョブを実行する方法は?