PHP中的随机延迟计时器

时间:2012-08-16 15:53:38

标签: php random timer

我想把一个php守护进程睡觉(使用System_Daemon :: iterate()) 所以它在一小时内随机分布最多运行20次。也许最小距离是聪明的,所以它在前半个小时不会运行20次而在下半个运行时不会运行0次。

我有点卡在这里,不知道如何从这个开始,任何帮助都是非常苛刻的!

2 个答案:

答案 0 :(得分:2)

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

http://net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/


...... 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

答案 1 :(得分:1)

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

// 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;
}

它并不完美,你浪费了一些时间,但我想它会完成这项工作。 有什么意见吗?