72分ごとにcronジョブを実行するにはどうすればよいですか?それとも、それほどきれいではない数ですか?
7 に答える
ジョブは間隔ベースではなく時間ベースで実行されるためcron、驚くほど簡単な方法はありません。ただし、少しハックですcrontabが、共通点が見つかるまで複数の行を設定できます。ジョブを 72 分ごとに実行するため、次の時間に実行する必要があります。
- 00:00
- 01:12
- 02:24
- 03:36
- 04:48
- 06:00
- 07:12
- ...
ご覧のとおり、パターンは 5 つのジョブで 6 時間ごとに繰り返されます。したがって、次の 5 行が含まれますcrontab。
0 0,6,12,18 * * * コマンド 12 1,7,13,19 * * * コマンド 24 2,8,14,20 * * * コマンド 36 3,9,15,21 * * * コマンド 48 4,10,16,22 * * * コマンド
もちろん、もう 1 つのオプションは、停止するまで希望の時間実行およびスリープするラッパー デーモンまたはシェル スクリプトを作成することです。
at(man at)で使用します。アプリまたは起動スクリプトに72分後の起動時間を計算させ、動作を開始する前に再度実行するようにスケジュールを設定します。
WindowsXPとビスタでも利用できます。
gnu/linuxの例を次に示します。at-fcommand.shnow+72分
クローンを使用しないでください...
#!/bin/sh
while [ true ]
do
sleep 4320
echo "Put your program here" &
done
毎分 cron をトリガーし、スクリプトが 72 分以上前に実行された場合は、スクリプトをすぐに終了させるというアプローチをいつでも取ることができます。
cron/crontabから直接これを行うことはできません。
cronジョブは、特定の間隔ではなく、特定のスケジュールで実行されます。
1つの代替案は、深夜1:12、2:24、3:36、...に実行し、深夜にほぼヒットするようにそれを伸ばすことによって、「72分ごと」に近いスケジュールを作成することです。crontabファイルでは、これらすべての時間を実行時間として指定できます。
もう1つの方法は、別のアプリケーションでスケジューリングを処理し、アプリケーションを起動することです。
これには正確に 20 個のタスクを設定する必要があります。つまり、1 つを 00:00 に設定し、次のタスクを 01:12 に、次のタスクを 02:24 に設定するなどです。
20 回の反復で 1 日になります。
残念ながら、これが唯一の方法です。cron タスクは実行されるのではなく、事前に固定されたスケジュールで設定されているためです。たとえば、「X 分後に最後のタスクが実行された」などです。
ええと、これがかなり遅れていることは承知していますが、スケジュールの問題を調べていて、この質問を見ました。
crontabでこれを行うだけです
*/72 * * * * /home/script.sh