Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的随机延迟定时器_Php_Random_Timer - Fatal编程技术网

PHP中的随机延迟定时器

PHP中的随机延迟定时器,php,random,timer,Php,Random,Timer,我想让php守护进程进入睡眠状态(使用System_daemon::iterate()) 因此,它在一小时内随机运行最多20次。也许一个最小距离是明智的,所以它不会在前半小时跑20次,在下半小时跑0次 我有点困在这里,不知道如何从这个开始,任何帮助都是非常感谢的 您可以使用cron作业,将脚本设置为经常运行 。。。Crontab: 0 9 * * * /path/to/bashscript 在/path/to/bashscript中: #!/bin/bash maxdelay=$((1*6

我想让php守护进程进入睡眠状态(使用System_daemon::iterate()) 因此,它在一小时内随机运行最多20次。也许一个最小距离是明智的,所以它不会在前半小时跑20次,在下半小时跑0次


我有点困在这里,不知道如何从这个开始,任何帮助都是非常感谢的

您可以使用cron作业,将脚本设置为经常运行


。。。Crontab:

0 9 * * * /path/to/bashscript
在/path/to/bashscript中:

#!/bin/bash
maxdelay=$((1*60))  # every hour, converted to minutes
for ((i=1; i<=20; i++)); do
    delay=$(($RANDOM%maxdelay)) # pick an independent random delay, 20 times
    (sleep $((delay*60)); /path/to/phpscript.php) & # background a subshell, then run the php script
done
#/bin/bash
maxdelay=$((1*60))#每小时,换算为分钟

对于((i=1;i我想出了一个可能的解决方案,我还没有尝试过,所以它主要包含语法或逻辑错误。因为它是作为守护进程运行的,所以它周围有一个永无止境的循环

// 3600 seconds or one hour
$timeframe=3600;
// run max 20 times in $timeframe
$runtimes=20;
// minimum delay between two executions
$mindelay=60;
// maxium delay between two executions
$maxdelay=240;

if ($cnt % $runtimes != 0) {
    $delay = rand($mindelay,$maxdelay);    
    System_Daemon::iterate($delay);    
    $sum += $delay;
    $cnt++;
} else {
    //final delay till the $timeframe
    if ($sum < $timeframe) {
        System_Daemon::iterate($timeframe - $sum); 
    }  
    $sum=0;
}
//3600秒或一小时
$timeframe=3600;
//在$timeframe中最多运行20次
$runtimes=20;
//两次执行之间的最小延迟
$mindelay=60;
//两次执行之间的最大延迟
$maxdelay=240;
如果($cnt%$runtimes!=0){
$delay=rand($mindelay,$maxdelay);
系统守护进程::迭代($delay);
$sum+=$delay;
$cnt++;
}否则{
//最终延迟至$timeframe
如果($sum<$timeframe){
系统守护进程::迭代($timeframe-$sum);
}  
$sum=0;
}
它并不完美,你会浪费一些时间,但我想它会填补这个工作。
有什么评论吗?

你有没有提到如何使cron作业以随机间隔运行,因为我不知道这种功能。好的,在这种情况下,cron没有进行随机操作,而是长期运行的bash脚本。我将+1回答,因为我认为PHP.t中的原始海报可以使用bash脚本中使用的相同方法hanks对于答案,我也考虑过cron,但没有看到实现它的任何可能性。但是这个解决方案也有一些缺陷,比如它不能保证它不会同时运行。总是让我想知道为什么有人会这样做。当你运行大量服务器并且你不想使用在所有主机上同时进行完全相同的定期维护,甚至以完全相同的频率进行维护。这对于处于这种情况的人来说是个好问题。