2010-11-18 19 views
1

好吧,我相當難住如何做到這一點。我有一個php腳本,通過一些網址循環。該URL存儲在urls.txt,它需要調用PHP腳本像php urlcheck.php LINE_FROM_urls.txt使用bash來線程我的php腳本

當它到達的過程中一組數字,我希望它睡5秒,這樣

COMCHECK=`ps aux | grep -c php` 

while [ $COMCHECK -ge 150 ];do 
COMCHECK=`ps aux | grep -c php` 
echo "Sleeping" 
sleep 5 

,然後我希望它再次檢查。如果它的-le 150,運行下一個網址等

我不知道如何做到這一點。我的狂歡是驚人的有限,坦率地說,這種語言讓我感到奇怪。

任何幫助?

回答

1

你可以嘗試這樣的:

limit=150 

# read lines from the file urls.txt one by one. 
while read line; do 

     # check number of running php processes. 
     while [ $(ps aux | grep -c php) -ge $limit ];do 
       # if it's >= limit..sleep. 
       echo "Sleeping"  
       sleep 5 
     done 

     # limit not reached..run another process..in background. 
     php urlcheck.php $line & 

done < urls.txt 
+0

這並獲得成功,而且相當好,我想補充。另外,你的代碼很好看<3有沒有辦法阻止它從PHP文件輸出錯誤等,除了刪除錯誤報告的PHP文件? – Rob 2010-11-18 06:29:37

+0

要刪除由PHP吐出的錯誤,你可以用'php urlcheck.php $ line 2'替換'php urlcheck.php $ line&'/ dev/null&' – codaddict 2010-11-18 06:31:38

+0

再次感謝你<3 – Rob 2010-11-18 06:44:15

1
while read URL; do 
    while (($(ps aux | grep -c php) >= 150)); do 
     sleep 5 
    done 

    php urlcheck.php "$URL" & 
done < urls.txt 

# Optional: wait for all PHP processes to finish. 
wait