2

我有一个 PHP 脚本,它可以在几秒钟内完成一些事情(长时间不运行)。我需要执行此脚本,假设每天执行 12 次(这可以更改)。24 / 12 = 2 小时。

我可以每 2 小时执行一次脚本,但我需要它在 24 小时内随机分配。

这意味着脚本不必在 01:05 PM、03:05 PM、05:05 PM 执行而是01:37 PM03 : 11 PM、05: 46 PM 执行。我想你已经明白了重点。很抱歉不是很清楚。

(可以安装 cron 和其他工具(如果需要)。运行 debian 6)

将提供赏金(100 代表)以获得可行的解决方案。

4

4 回答 4

2

我会这样做:设置一个 cron 来告诉它像这样每 2 小时运行一次

0 /2 * * * php youscript.php

这表示每隔一小时运行一次 yourscript.php。然后在 php 代码本身的顶部放置:

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

这将使脚本在开始工作前 5 到 50 分钟之间随机暂停一段时间。您可以更改随机数的最小值和最大值,以确保运行之间的时间最短。

如果您希望它运行 24 次而不是

0 * * * * php youscript.php

甚至一天48次

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

假设您希望脚本N每天运行几次。然后创建一个 bash 脚本 my_php_runner.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

cron每天运行一次 bash 脚本。

于 2012-05-26T17:53:46.037 回答
0

如果您严格必须每天运行 X 次:

  • 手动(或制作一个简单的脚本)将一天分成 X 部分。
  • 为每个部分制作一个 cron 行。
  • 在运行期间将脚本延迟 0 到 24H/x 之间的随机量。

如果不:

  • Cron 在午夜运行。
  • PHP使用泊松分布延迟然后处理。
  • 脚本结束运行一个新脚本,除非它的处理超过了午夜。
于 2012-05-26T17:49:44.187 回答
0

您始终可以sleep(rand(60, 1.5 * 60))在 cronjob 开始时抵消其执行。在此期间,您将有一个空闲的 PHP 进程,这可能是也可能不是问题。

于 2012-05-26T17:42:55.827 回答