私の問題はcronの仕事と多少関連していると思いますが、完全にはわかりません。
/home/me/myscript.sh
完了するのに不確実な時間(たとえば、10分から1時間)がかかる可能性があるタスクを実行するスクリプト()があるとします。私が望むのは、スクリプトを実行してから完了してから1時間以内に再実行することです。これを達成するために使用できる「スケジューラ」とは何ですか?私はUbuntuを使用しています。
答え1
cron
この作業には適していないようです。最後の実行が完了してから1時間後にループを介してwhile
実行できます。
#!/bin/sh
while :; do
some_job_that_takes_a_while
sleep 3600
done
または、at(1)
ジョブが終了したら、1時間以内に次の実行をスケジュールします。
$ cat atat
#!/bin/sh
echo running the job
echo $HOME/atat | at now + 1 hours
$ ./atat
running the job
job 4 at 2015-09-30 17:00
$ date
Wed Sep 30 16:00:19 UTC 2015
$
誰かが手動でそのジョブを終了して再開するまで、後続のジョブが実行されないように中断される場合に備えて、完全性チェックまたはジョブtimeout
内チェックが必要になる場合があります。
答え2
最も簡単な方法は、cronにそのように指示することです。 cron が実行するコマンドとして使用します。
/home/me/myscript.sh; sleep 1h; /home/me/myscript.sh
sleep
このサフィックスをサポートしていない場合は、代わりにh
使用してくださいsleep 3600
。
または、それを呼び出すラッパースクリプトを作成してくださいwrapper.sh
。
#!/usr/bin/env bash
/home/me/myscript.sh
sleep 1h
/home/me/myscript.sh
cronで実行してみてください。