random delay timer in PHP

送分小仙女□ 提交于 2019-12-13 02:34:45

问题


I want to put a php daemon to sleep (with System_Daemon::iterate()) so it runs max 20 times randomly spread over an hour. maybe a min distance would be smart so it doesn't run 20 times in the first half hour and 0 times in the second half.

i'm kinda stuck here and don't know how to start with this one, any help is very apreciated!


回答1:


You may use cron jobs, to set the script to run ever so often.

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


... Crontab:

0 9 * * * /path/to/bashscript

and in /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



回答2:


i came up with one possible solution, i didnt try it out yet, so it main contain syntax or logic errors. because it is running as a daemon there is a never ending loop around it.

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

its not perfect and u waste some time but i guess its going to fullfill the job. any comments?



来源:https://stackoverflow.com/questions/11991055/random-delay-timer-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!