2010-11-18 19 views
1

Tamam, ben bunu nasıl yapılacağı hakkında oldukça şaşırdım. Bazı URL'lerden geçen bir php betiğim var. o zaman buBenim php betiğimde iş parçacığı kullanmak için <a0></ a0>,

COMCHECK=`ps aux | grep -c php` 

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

ve benzeri, bunu 5 saniye uyumak istiyorum, URL'ler urls.txt saklanır ve o süreçlerin belirli sayıda ulaştığında php urlcheck.php LINE_FROM_urls.txt

gibi php script çağırmak gerekiyor Tekrar kontrol etmesini istiyorum. -le 150 ise, sonraki URL'yi çalıştırın vb.

Bunu nasıl yapacağımı bilmiyorum. Bash inanılmaz derecede sınırlıdır ve açıkçası, dil beni terk eder.

Herhangi bir yardım?

cevap

1

Sen gibi bir şey deneyebilirsiniz: Bu hile yaptı

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

ve oldukça iyi eklemeliyim. Ayrıca, kodunuz çok güzel görünüyor <3 php dosyasındaki hata raporlarını kaldırmanın dışında, php dosyasından hataların çıktısını almanın bir yolu var mı? – Rob

+0

PHP tarafından yazılan hataları kaldırmak için 'php urlcheck.php $ line &' 'php urlcheck.php $ line 2>/dev/null &' – codaddict

+0

'un yerini alabilirsiniz. Tekrar teşekkürler <3 – Rob

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 
İlgili konular