4

専用サーバーでも cron 時間を 1 分未満に設定できません。betfair api を呼び出し、計算は時間に大きく依存するため、15 秒ごとに実行する必要があります。お知らせ下さい。

4

3 に答える 3

11

15 秒ごとにジョブを呼び出す必要がある場合は、cron を使用しないでください。cron は、ジョブを後で実行するように要求するように設計されています。

代わりに、親がジョブを終了した後、15 秒間スリープしてから、子スクリプトを呼び出してから終了します。子スクリプトはそのジョブを実行し、15 秒間スリープしてから次のスクリプトを呼び出すことができます。泡立てて、すすぎ、繰り返し。

サーバーに時間制限がない場合は、子スクリプトを生成する必要さえありません。15秒寝て、自分のことをして、15秒寝て、次のことをする、というように。スリープ スクリプトは CPU を消費しませんが、RAM を消費します。ただし、ホストの PID を循環させるよりはましです。ホストが不安になる可能性があります。

于 2010-09-22T06:08:52.027 に答える
7

Cron では、1 分に 1 回の速度でしか実行できません。

私がすることは、スクリプト内で 15 秒のタイミングを実行することです。

  • 親スクリプトを 1 分に 1 回実行します。
  • 子スクリプトが存在し、新しいサイクルが開始される前に、そのスクリプト内で 15 秒ごとに子スクリプトを実行します。
于 2010-09-22T06:03:23.673 に答える
1

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.
于 2010-09-22T06:51:59.857 に答える