J’ai un morceau de logique qu’il va exécuter le service de démarrage un par un basé sur la liste des serveurs maintenant la question est après l’exécution réussie du dernier serveur j’ai besoin de faire une action basée sur le statut. comment gérer la commande pour attendre le dernier serveur à effectuer
Veuillez suggérer
exemple de code.
foreach my $Server_name(@servers) { my $command =qq(sudo /bin/su - jenkins -c "ssh scm\@$Server_name ' /bin/sh ${SCRIPT_HOME}/startService.sh'"); print "$command\n"; system($command); if ($?== 0) { do some action } }
Le $?
Dans ce cas, variable contient le statut du system
, mais le système lui-même le renvoie également. Puis atsortingbuer son retour à une variable et le vérifier après la boucle
my $exit_status; foreach my $server_name (@servers) { my $command = qq(sudo /bin/su - jenkins -c "ssh scm\@$server_name ' /bin/sh ${SCRIPT_HOME}/startService.sh'"); print "$command\n"; $exit_status = system($command); } if ($exit_status == 0) { ... }
Je voudrais aussi commenter
Nous ne soaps pas ce dont vous avez besoin des erreurs mais considérez si $?
est assez; si vous ne vérifiez que les erreurs, tout va bien, mais sinon tout ce que vous obtenez du system
est le dernier état de l’ wait
. Divers modules IPC
permettent un meilleur signalement des erreurs
Une commande dans une chaîne pour le system
peut être dangereuse car elle peut être transmise au shell pour être interprétée en premier. Si le shell n’est pas réellement nécessaire, il est préférable d’utiliser le système de type LIST, où le shell n’est pas impliqué; voir également exec pour la discussion du formulaire de liste
Pour préparer une chaîne pour la commande, il est préférable d’utiliser Ssortingng :: ShellQuote