captain_torche Posté 1 Juillet 2015 Posté 1 Juillet 2015 Je vais avoir besoin de lancer plusieurs scripts PHP en parallèle, je voulais savoir si je pouvais faire un script sh pour me simplifier la tâche Dans le principe, je dois lancer plusieurs scripts PHP qui se présentent de la manière suivante : script.php 1 20 script.php 21 40 script.php 41 60 etc, pour environ 300 occurrences Il va falloir que j'utilise screen pour éviter de perdre l'exécution, mais je me demandais : - dois-je simplement faire un screen et y lancer un script sh qui me les lance tous, ou - puis-je faire un script sh qui m'ouvre un screen par script à exécuter ? Et, dans ce dernier cas, comment faire ?
Dan Posté 1 Juillet 2015 Posté 1 Juillet 2015 Un script comme ceci si tu as besoin de 2 arguments comme dans ton exemple ? Edite la limite de 300 ou remplace-la par une variable.. #!/bin/bash low=1 high=20 while [ $low -lt 300 ] do screen ton_script.php $low $high & low=$((low+20)) high=$((high+20)) done
Dan Posté 1 Juillet 2015 Posté 1 Juillet 2015 A mon sens il faut supprimer le '&' en fin de commande, car screen doit être connecté à un terminal
Dan Posté 1 Juillet 2015 Posté 1 Juillet 2015 Pour lancer une flopée de scripts en parallèle, tu peux remplacer la ligne "screen..." par une ligne comme ceci : nohup ton_script.php $low $high & Si tu as des messages, ils seront tous répertoriés dans nohup.out ... pour tous tes scripts. Ca risque d'être donc peu lisible.
captain_torche Posté 1 Juillet 2015 Auteur Posté 1 Juillet 2015 Deux questions : - Qu'est ce que nohup ? - A quoi sert le & ?
Message populaire. Dan Posté 1 Juillet 2015 Message populaire. Posté 1 Juillet 2015 Le & sert à lancer un process en tâche de fond... Mais il reste associé au terminal qui l'a lancé. En mettant nohup devant la commande (et & à la fin) on lance une commande en tâche de fond, en la dissociant du terminal. Tu peux voir les commandes en tâche de fond en lançant "jobs". Elles sont numérotées, et tu peux les ramener sur le devant de la scène avec la commande fg Exemple : ns1.xxx:root# nohup sleep 300 & [1] 16679 nohup: les entrées sont ignorées et la sortie est ajoutée à « nohup.out » ns1.xxx:root# nohup sleep 200 & [2] 16697 nohup: les entrées sont ignorées et la sortie est ajoutée à « nohup.out » ns1.xxx:root# jobs [1]- En cours d'exécution nohup sleep 300 & [2]+ En cours d'exécution nohup sleep 200 & ns1.xxx:root# fg %2 nohup sleep 200 ^Z [2]+ Stoppé nohup sleep 200 ns1.xxx:root# bg %2 [2]+ nohup sleep 200 & Lorsqu'une commande est en avant plan, tu peux la stopper avec CTRL-Z et la mettre en arrière plan avec "bg" Et tu peux attendre la fin de toutes tes commandes lancées en tâche de fond avec "wait" qui ne te rendra la main qu'une fois toutes les commandes terminées. ns1.xxx:root# wait [1]- Fini nohup sleep 300 [2]+ Fini nohup sleep 200 ns1.xxx:root# Tu peux aussi "tuer" une commande en lançant un "kill %2" (le %2 étant exemplatif, et dépendant du numéro de la commande à terminer) J'espère que je l'ai bien expliqué 1
captain_torche Posté 1 Juillet 2015 Auteur Posté 1 Juillet 2015 Parfaitement ! Ca revient (Pour en revenir au screen) à lancer les commandes dans un screen avec un & à la fin ?
Dan Posté 1 Juillet 2015 Posté 1 Juillet 2015 Disons que c'est une manière différente de lancer des process en tâche de fond Perso, je ne suis pas un fanatique du "screen", même si je reconnais qu'il est très puissant. Trop peut-être pour mes besoins.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant