Php 脚本必须在24小时内执行X次。我如何随机化?

Php 脚本必须在24小时内执行X次。我如何随机化?,php,bash,cron,Php,Bash,Cron,我有一个PHP脚本,它可以在几秒钟内完成一些事情,但长时间没有运行。我需要执行这个脚本,让我们假设,这个脚本每天可以更改12次。24/12=2小时 我可以每2小时执行一次脚本,但我需要它在24小时内随机化 这意味着脚本不必在下午1:05、03:05、05:05执行,而是在下午1:37、03:11、05:46执行。我想你已经明白这一点了。对不起,我不太清楚 如果需要,可以安装cron和其他工具。运行Debian6 Bounty 100 rep将提供一个工作解决方案。我会这样做:设置一个cron,让

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

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

这意味着脚本不必在下午1:05、03:05、05:05执行,而是在下午1:37、03:11、05:46执行。我想你已经明白这一点了。对不起,我不太清楚

如果需要,可以安装cron和其他工具。运行Debian6


Bounty 100 rep将提供一个工作解决方案。

我会这样做:设置一个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

我会这样做:设置一个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

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

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

如果您严格要求每天运行X次:

手动或制作一个简单的脚本将一天分成X部分。 为每个部分制作一条cron线。 在运行期间,将脚本随机延迟0到24小时/x。 如果没有:

克朗在午夜跑步。 PHP使用泊松分布延迟,然后处理。 “脚本结束”运行新脚本,除非其处理时间超过午夜。
如果您严格要求每天运行X次:

手动或制作一个简单的脚本将一天分成X部分。 为每个部分制作一条cron线。 在运行期间,将脚本随机延迟0到24小时/x。 如果没有:

克朗在午夜跑步。 PHP使用泊松分布延迟,然后处理。 “脚本结束”运行新脚本,除非其处理时间超过午夜。
假设您希望脚本每天运行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脚本。

假设您希望脚本每天运行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脚本。

您关心间隔多长吗?最小的数字是12,或者说每天运行的确切次数是12?这个数字可以是任何数字。通常是30-50。我不关心执行之间是否有最小的时间间隔。您可以每15分钟运行一次cron,并使用php脚本决定是否运行确切的作业,如果时间合适,则使用带有时间的数组,如果不退出作业,则运行。它必须一天运行XXX次,或者一天大约XXX次?@wildplasser 1-2次失误是可以接受的。你关心间隔多长时间吗?最小的数字是12,或者说每天运行的确切次数是12?这个数字可以是任何数字。通常是30-50。我不关心执行之间是否有最小的时间间隔。您可以每15分钟运行一次cron,并使用php脚本决定是否运行确切的作业,如果时间合适,则使用带有时间的数组,如果不退出作业,则运行。它必须一天运行XXX次,或者一天大约XXX次?@wildplasser 1-2次失误是可以接受的。是的,但是如果我不得不一天执行50次而不是12次呢?我刚刚说了12,所以更容易理解我的需求:这说明了,对于12的倍数,这是最简单的,但是你可以看到cron语法是如何工作的。很可能cron已经安装在你的计算机上,你只需要编辑指令文件。是的,但是如果我必须每天执行它12次,而不是50次呢?我刚刚说了12,所以更容易理解我的需求:这表明
如何,使用12的倍数是最简单的,但是您可以看到cron语法的工作原理很可能cron已经安装在您的计算机上,您只需编辑指令文件是的,您的cronjob将在固定时间运行,之后它可以在开始工作之前随机休眠一段时间。是的,您的cronjob将在固定时间运行,之后它可以在开始工作之前随机休眠一段时间。实际上,这是一个非常好的主意。但是在N=50的情况下,+-300秒的睡眠时间太长,因此脚本不会执行50次。True。为了简单起见,我对300进行了硬编码,但您可以将其设置为WAIT_TIME/10。实际上,这是一个非常好的主意。但是在N=50的情况下,+-300秒的睡眠时间太长,因此脚本不会执行50次。True。为了简单起见,我对300进行了硬编码,但您可以将其设置为WAIT_TIME/10。