我想让一个 php 守护程序进入睡眠状态(使用 System_Daemon::iterate()),所以它在一个小时内随机运行最多 20 次。也许最小距离会很聪明,所以它在前半小时不会运行 20 次,在后半小时不会运行 0 次。
我有点卡在这里,不知道如何从这个开始,任何帮助都非常感谢!
您可以使用 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
我想出了一种可能的解决方案,我还没有尝试过,所以它主要包含语法或逻辑错误。因为它作为守护进程运行,所以它周围有一个永无止境的循环。
// 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;
}
它并不完美,你浪费了一些时间,但我想它会完成这项工作。任何意见?