2010-11-18 20 views
1

Bon, je suis assez perplexe sur la façon de faire. J'ai un script PHP qui boucle à travers certaines URLs. Les urls sont stockés dans urls.txt, et il a besoin d'appeler le script php comme php urlcheck.php LINE_FROM_urls.txtUtiliser bash pour enfiler mon script PHP

Quand il atteint un certain nombre de processus, je veux dormir pendant 5 secondes, comme celui-ci

COMCHECK=`ps aux | grep -c php` 

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

puis Je veux qu'il vérifie à nouveau. Si son -le 150, exécutez l'URL suivante, etc

Je n'ai aucune idée de comment faire cela. Mon bash est incroyablement limité, et franchement, la langue me dérange.

Une aide?

Répondre

1

Vous pouvez essayer quelque chose comme:

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

Cela a fait le tour, et bien je pourrais ajouter. En outre, votre code est très agréable <3 Y at-il un moyen de l'empêcher de sortir des erreurs etc du fichier php, autre que de supprimer les rapports d'erreurs sur le fichier php? – Rob

+0

Pour supprimer les erreurs crachées par PHP, vous pouvez remplacer 'php urlcheck.php $ line &' par 'php urlcheck.php $ ligne 2>/dev/null &' – codaddict

+0

Merci encore <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