専用サーバーでも cron 時間を 1 分未満に設定できません。betfair api を呼び出し、計算は時間に大きく依存するため、15 秒ごとに実行する必要があります。お知らせ下さい。
3 に答える
15 秒ごとにジョブを呼び出す必要がある場合は、cron を使用しないでください。cron は、ジョブを後で実行するように要求するように設計されています。
代わりに、親がジョブを終了した後、15 秒間スリープしてから、子スクリプトを呼び出してから終了します。子スクリプトはそのジョブを実行し、15 秒間スリープしてから次のスクリプトを呼び出すことができます。泡立てて、すすぎ、繰り返し。
サーバーに時間制限がない場合は、子スクリプトを生成する必要さえありません。15秒寝て、自分のことをして、15秒寝て、次のことをする、というように。スリープ スクリプトは CPU を消費しませんが、RAM を消費します。ただし、ホストの PID を循環させるよりはましです。ホストが不安になる可能性があります。
Cron では、1 分に 1 回の速度でしか実行できません。
私がすることは、スクリプト内で 15 秒のタイミングを実行することです。
- 親スクリプトを 1 分に 1 回実行します。
- 子スクリプトが存在し、新しいサイクルが開始される前に、そのスクリプト内で 15 秒ごとに子スクリプトを実行します。
Cron は、最小 1 分で解決するように構築されたジョブ スケジューラです。それよりも細かい解像度が必要な場合は、別のスケジューリング ツールを見つけるか、独自のツールを作成する必要があります。
私が過去に使用したものは次のとおりです。必要なギャップと最小ギャップを構成すると、次のスクリプトがペイロードを毎秒実行しますN
。これは単純な「N
各反復間で数秒待機する」スケジューラではないことに注意してください。実際には、終了後ではなく、前の反復の開始N
から数秒後に次の反復が開始されます。
N
最小のギャップがあるため、ペイロードに数秒以上かかる場合は、継続的に実行されません。その状況で継続的に実行したい場合は、最小ギャップを 0 に設定してください。
それを行うコードは次のとおりです。
#!/usr/bin/bash
payload() {
if [[ $1 -eq 1 ]] ; then
echo "Sleeping for 1 second at $(date +%H:%M:%S)."
else
if [[ $1 -lt 10 ]] ; then
echo "Sleeping for $1 seconds at $(date +%H:%M:%S)."
else
echo "Sleeping for $1 seconds at $(date +%H:%M:%S)."
fi
fi
sleep $1
echo " Finished at $(date +%H:%M:%S)."
echo
}
gap=10
mingap=3
for i in {1..20} ; do
next=$(($(date +%s) + ${gap}))
payload ${i}
if [[ ${mingap} -ne 0 ]] ; then
sleep ${mingap}
fi
while [[ $(date +%s) -lt ${next} ]] ; do
sleep 1
done
done
ペイロードはロジックの一部ではなく、デバッグ目的でそこにあるものです。それをあなたが望むものに置き換えることができます。また、for
ループもサンプルです。これを無限ループに置き換えるか、(たとえば) 1 時間ごとに開始されるスクリプトの新しいインスタンスで 60 分間の反復のみをスクリプトに実行させることができますcron
。
サンプルの実行は次のとおりです。ペイロードが 10 秒ごとに実行されることがわかります (奇数の 11 秒は の気まぐれによるsleep
) 7 秒以上かかるまで続きます。その時点で、最小ギャップが開始されます。
Sleeping for 1 second at 14:36:08.
Finished at 14:36:09.
Sleeping for 2 seconds at 14:36:18.
Finished at 14:36:20.
Sleeping for 3 seconds at 14:36:28.
Finished at 14:36:31.
Sleeping for 4 seconds at 14:36:39.
Finished at 14:36:43.
Sleeping for 5 seconds at 14:36:49.
Finished at 14:36:54.
Sleeping for 6 seconds at 14:37:00.
Finished at 14:37:06.
Sleeping for 7 seconds at 14:37:10.
Finished at 14:37:17.
Sleeping for 8 seconds at 14:37:20.
Finished at 14:37:28.
Sleeping for 9 seconds at 14:37:31.
Finished at 14:37:41.
Sleeping for 10 seconds at 14:37:44.
Finished at 14:37:54.
Sleeping for 11 seconds at 14:37:57.
Finished at 14:38:08.
Sleeping for 12 seconds at 14:38:11.
Finished at 14:38:23.
Sleeping for 13 seconds at 14:38:27.
Finished at 14:38:40.
Sleeping for 14 seconds at 14:38:43.
Finished at 14:38:57.
Sleeping for 15 seconds at 14:39:00.
Finished at 14:39:15.
Sleeping for 16 seconds at 14:39:18.
Finished at 14:39:34.
Sleeping for 17 seconds at 14:39:38.
Finished at 14:39:55.
Sleeping for 18 seconds at 14:39:58.
Finished at 14:40:16.
Sleeping for 19 seconds at 14:40:19.
Finished at 14:40:38.
Sleeping for 20 seconds at 14:40:41.
Finished at 14:41:02.