2012-08-16 2 views
1

PHP 데몬을 (System_Daemon :: iterate()) 와 함께 잠자기하고 싶습니다. 그래서 최대 20 시간 동안 무작위로 1 시간 이상 실행됩니다. 어쩌면 최소 거리가 똑똑하기 때문에 전반 30 분에 20 번, 후반에 0 번을 실행하지 않습니다.PHP의 임의 지연 타이머

나는 여기에 다소 붙어있어 이걸 어떻게 시작해야할지 모르겠다. 어떤 도움도 매우 절망적이다!

+0

항상 누군가가 그렇게하는 이유가 궁금합니다. – GolezTrol

+0

대규모 서버 팜을 실행 중이고 모든 호스트에서 똑같은 일정 유지가 똑같은 빈도로 발생하지 않도록하려면 이런 종류의 작업을 수행해야합니다. 이 상황에서 사람들에게 좋은 질문입니다. –

답변

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

완벽한 및 u는 약간의 시간을 낭비하지만 난 그 일을 fullfill에 갈 생각하지. 모든 댓글?

2

cron 작업을 사용하여 스크립트를 자주 실행되도록 설정할 수 있습니다.

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


... crontab 명령 :

0 9 * * * /path/to/bashscript 

과에/경로 /로가/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

Cron이 무작위로 실행되지 않습니다. –

+0

@Mike Brant, 그럴 것입니다. – Homework

+0

cron 작업을 임의의 간격으로 실행하는 방법에 대해 언급하고 싶습니다. 그런 기능을 인식하지 못하기 때문입니다. –