2010-11-18 4 views
1

Okay, ich bin ziemlich ratlos, wie dies zu tun ist. Ich habe ein PHP-Skript, das einige URLs durchläuft. Die URLs werden in urls.txt gespeichert, und es muss den PHP-Skript nennen wie php urlcheck.php LINE_FROM_urls.txtMit Bash mein PHP-Skript thread

Wenn es eine bestimmte Anzahl von Prozessen erreicht, ich es für 5 Sekunden schlafen will, wie diese

COMCHECK=`ps aux | grep -c php` 

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

und dann Ich möchte es nochmal überprüfen lassen. Wenn -le 150, führe die nächste URL usw.

Ich habe keine Ahnung, wie das geht. Mein Bash ist erstaunlich begrenzt, und ehrlich gesagt, die Sprache macht mich verrückt.

Irgendwelche Hilfe?

Antwort

1

können Sie versuchen, so etwas wie:

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

Dieser der Trick, und ganz gut möchte ich hinzufügen. Außerdem ist Ihr Code sehr gut aussehend. <3 Gibt es eine Möglichkeit, das Ausgeben von Fehlern usw. aus der PHP-Datei zu stoppen, außer das Entfernen von Fehlerberichten in der PHP-Datei? – Rob

+0

Um die Fehler zu entfernen, die von PHP gespuckt werden, kann man 'php urlcheck.php $ line &' durch 'php urlcheck.php $ line 2>/dev/null ersetzen und' – codaddict

+0

Nochmals vielen Dank <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