L'exécution de plusieurs processus d'arrière-plan par le biais de scripts shell
Je suis nouveau sur la création de scripts shell, donc pardon pour mon manque de connaissances.
Mon objectif est de courir deux serveurs server1
et server2
en arrière-plan, puis exécuter un script python scriptRun
par le biais de mon script shell.
Etape 1:
- Lancement de server1 (le faire fonctionner en arrière-plan)
- Quelques commandes sur ce serveur (qui sont des commandes personnalisées)
Etape 2:
- Lancement server2
Etape 3:
- Exécuter mon script python et afficher sa sortie sur le terminal après server1 et server2 sont lancés
Mon script shell ressemble à ceci:
echo "Launching server1"
java StartServer1.jar && (serverCommand1 && serverCommand2) &
echo "Launching server2"
java StartServer2.jar &&
echo "Running script"
python scriptRun.py
Ce script ne fonctionne pas du tout.
J'ai essayé de supprimer les serverCommand1 et serverCommand2, cela fonctionne, mais le script python n'attend pas pour serveur2 pour lancer.
Également le terminal affiche les sorties de server1 et server2, et non pas la sortie du script python.
Ma question est comment puis-je exécuter plusieurs processus en arrière-plan et exécuter un autre processus qui dépend de la précédente processus?
OriginalL'auteur user2354302 | 2013-12-04
Vous devez vous connecter pour publier un commentaire.
La
&&
dans votre script semblent un peu confus. Pour l'enregistrement:&
après une commande à exécuter à l'arrière-plan&&
est pour le chaînage de plusieurs commandes en cas de succès, par exemplecmd1 && cmd2
exécuteracmd1
et seulement si elle sort avec succès, il va exécutercmd2
. Les deux commandes seront exécutées dans le premier plan, il n'y a pas de semi-finition.Peut-être que vous voulez faire quelque chose comme ceci:
En fait, plutôt que de dormir pour un montant fixé de temps, il est préférable si vous pouvez détecter que le serveur est prêt, et réagir sur ça. Par exemple, dans les journaux, peut-être il y a un message indiquant que le serveur est prêt, disons un message qui dit "PRÊT". Ensuite, vous pouvez faire quelque chose comme ceci:
C'est une boucle infinie, il y a, dans chaque sommeil, il dort pendant 5 secondes et vérifie si le journal contient le texte "PRÊT". Si elle ne termine la boucle. Vous pouvez venir avec une variation de ce qui convient à vos besoins.
J'ai amélioré ma réponse
Je vous remercie. Qui est plus souple Mon serverCommand1 et 2 ne fonctionnent pas. Il dit commande introuvable. Va falloir trouver un travail autour de pour que.
OriginalL'auteur janos
Vous devez
wait
pour les processus d'arrière-plan pour terminer avant l'exécution de votre script python. En outre, de redirigerSTDOUT
etSTDERR
de la java des processus de/dev/null
si vous souhaitez ignorer ceux:(Je ne suis pas sûr de savoir comment votre serveur de commandes de travail, mais vous pourriez avoir besoin pour
wait
après le démarrage de server1 si vous avez besoin d'envoyer des commandes.)wait
de commande est peut-être en attente de server2 de compléter ou de sortie. Je veux attendre jusqu'à son lancement, puis exécuter mon script python. Votre script avec succès redirige la sortie, mais le script python n'est jamais à court, peut-être de son attente pour serveur1 et 2 d'être tué.OriginalL'auteur devnull