2

私はPHPスクリプトを持っていますが、これはほんの数秒で何かを実行します(長時間実行されていません)。このスクリプトを実行する必要があります。1日に12回(これは変更される可能性があります)と仮定しましょう。24/12=2時間。

スクリプトは2時間ごとに実行できますが、24時間ごとにランダム化する必要があります。

つまり、スクリプトは01:05 PM、03:05 PM、05:05 PMに実行する必要はなく0137 PM 03:11 PM、05:46PMに実行する必要があります。あなたはその点を理解していると思います。はっきりしないのでごめんなさい。

(cronおよびその他のツール(必要な場合)をインストールできます。debian6を実行しています)

バウンティ(100 rep)は、実用的なソリューションとして提供されます。

4

4 に答える 4

2

これが私がそれをする方法です:このように2時間ごとに実行するようにそれを指示するためにcronをセットアップしてください

0 /2 * * * php youscript.php

これは、yourscript.phpを1時間おきに実行することを意味します。次に、phpコード自体の先頭に次のように入力します。

sleep(rand(5*60,50*60));

これにより、スクリプトは作業を行う前に5〜50分のランダムな時間一時停止します。乱数の最小値と最大値を変更して、実行間の最小時間を確保できます。

代わりに24回実行したい場合は、

0 * * * * php youscript.php

または1日48回

0,30 * * * * php youscript.php
于 2012-05-26T17:41:37.637 に答える
2

Nスクリプトを1日に何度も実行したいとします。my_php_runner.bash次に、次のようなbashスクリプトを作成し ます。

#!/bin/bash

N=12  # 50 times a day

let WAIT_TIME=86400/$N

while [[ $n -gt 0 ]]; do
    php yourscript.php

    # Sleep for $WAIT +/- 300 seconds
    sleep $(( $WAIT - 300 + $RANDOM%600 ))
    ((n--))
done

スクリプトを12回実行し、実行の間に115〜125分待機します。次に、次のようなものを追加します

0 0 * * * my_php_runner.bash

cron1日1回bashスクリプトを実行します。

于 2012-05-26T17:53:46.037 に答える
0

cronjobの開始時に、いつでもsleep(rand(60, 1.5 * 60))その実行を相殺することができます。この間、PHPプロセスはアイドル状態になりますが、問題がある場合とない場合があります。

于 2012-05-26T17:42:55.827 に答える
0

厳密に1日にX回実行する必要がある場合:

  • 手動で(または簡単なスクリプトを作成して)1日をXの部分に分割します。
  • 各部分にcron行を作成します。
  • 実行中、スクリプトを0〜24H/xのランダムな量だけ遅延させます。

そうでない場合:

  • cronは真夜中に実行されます。
  • PHPは、ポアソン分布を使用して遅延し、処理します。
  • スクリプトの終わりは、処理が深夜を超えない限り、新しいスクリプトを実行します。
于 2012-05-26T17:49:44.187 に答える