Exécuter une command jusqu'à ce qu'elle s'arrête à l'échec

Je souhaite exécuter une command jusqu'à ce qu'il soit terminé avec succès, puis arrêtez. Je sais que je peux configurer une boucle de bash pour faire cela, mais je suis curieux s'il y a des moyens portables de faire ceci semblable à watch -n5 qui ferait ce que je cherchais.

Le cas d'utilisation: j'essaie de me connecter via SSH à un server qui peut ne pas être encore disponible.

5 Solutions collect form web for “Exécuter une command jusqu'à ce qu'elle s'arrête à l'échec”

Il suffit d'envelopper ladite boucle bash dans un script, en utilisant $1 pour spécifier la command réelle à exécuter et $2 pour une valeur de sumil arbitraire. Pour ce faire, vous pourrez exécuter la command comme suit:

 $ reallyrunit "ls" 5 
  # xxx.xxx.xxx.xxx = ipaddr ssh host
 jusqu'à [`nmap --open -p 22 xxx.xxx.xxx.xxx | grep -c" ssh "` -eq 1]
 faire 
 dormir 4
 terminé 

 # ssh stuff ici

Je ne suis pas conscient d'une compilation pour cela, mais le bash à utiliser est quelque chose comme:

 RET=1;until [[ $RET = 0 ]];do echo "$(date): About to make an attempt to connect"; ssh 192.168.33.12; RET="$?";sleep 1;done 

EDIT: Ajout de la date et du commentaire afin que vous puissiez suivre combien de time il a échoué.

Je voudrais structurer cela dans une boucle bash. Je suppose que vous pouvez également faire un sondage sur le système (ping, nmap ou autrement) pour déterminer l'état du service et vous connecter si vous réussissez.

Vous pouvez définir la valeur de sortie à une valeur non nulle, puis faire une boucle jusqu'à ce que la command revienne avec une sortie 0 (succès). Voici un script que j'ai:

 #!/bin/sh cd /exports/home/exports/sl $(exit 1) while [ $? != 0 ]; do rsync -avlH --delete --exclude=6.1/archive --exclude=6.1/i386/archive --exclude=6.1/x86_64/archive --exclude=6.1/i386/iso --exclude= 6.1/x86_64/iso rsync://rsync.gtlib.gatech.edu/scientific/6.1 6.1/; done 

Pas le meilleur des scripts – c'était plus une expérience de pensée de s'assurer que le rsync redémarrera quand il échouera jusqu'à ce qu'il soit terminé avec succès.

Modifier: Dans votre cas, vous voulez probablement quelque chose comme:

 #!/bin/sh $(exit 1) ; while [ $? != 0 ]; do sleep 1 ; nc -vvv -z 192.168.15.37 22 && ssh 192.168.15.37 ; done 

Vous pouvez append des conditions d'erreur ici et là, mais l'important est de vous connecter immédiatement une fois que vous avez vérifié si le port est ouvert, à quoi sert l'opération &&, elle exécutera la prochaine command si la command précédente a réussi. (Jusqu'alors, une connection échouée renverra un code de sortie non nul, ce qui entraînera la poursuite de la boucle). Une fois que vous vous connectez avec succès et que vous vous déconnectez, le code de sortie renvoyé à partir de cette session de connection réussie mettra fin à la boucle.

(la command de sumil est facultative, mais notez que, dans certains cas, sans une boucle de veille, votre affichage peut ralentir jusqu'à ce que vous réduisiez le minimum ou passez à la window suivante, ce qui pourrait poser problème si votre écran est un ordinateur de bureau distant)

  • Est-ce que quelqu'un met en brute mon mot de passe? sshd: inconnu et sshd: clignotant au sumt
  • écran -R ne fonctionne pas avec ssh
  • SSH: Authentification à deux facteurs
  • Peut SSH dans le server mais ne peut pas taper quelque chose dans l'invite. Quelle est une cause possible pour cela?
  • ssh_exchange_identification: read: Réinitialisation de la connection par pair
  • Comment configurer OpenSSH sur un server Windows 2008 pour l'authentification contre Active Directory
  • CentOS 6 restreint l'access user ssh à son dossier personnel
  • Comment puis-je m'empêcher d'être automatiquement déconnecté d'un commutateur cisco nexus en raison de l'inactivité
  • SSH répond comme un user et Sudo comme un autre
  • Le tunnel SSH utilisant PuTTY ne fonctionne plus après le changement de server
  • Lier le transfert du port SSH à IP par l'user
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.