3 votes

Comment puis-je capturer le statut de sortie de `nc` lorsqu'il est exécuté à partir de `timeout`?

Je veux tester la connectivité à un hôte arbitraire en utilisant netcat. Il semble que l'argument -w ne ferme pas réellement la connexion après 5 secondes. (Cela se produit sur Ubuntu 14.04 avec netcat-traditional 1.10-40). Il continuera uniquement à essayer de se connecter pendant 5 secondes. Ce que je veux vraiment savoir, c'est si nc a pu se connecter avec succès à l'hôte (statut de sortie 0).

Pour contourner le problème de nc, j'ai exécuté nc via la commande timeout. Cela produit la fonctionnalité souhaitée, cependant, timeout se termine toujours avec un code d'état 124.

ce que je veux vraiment c'est le statut de sortie de nc. Comment puis-je l'obtenir en exécutant timeout 5 nc -w 5 bach; echo $?

3voto

Paul Haldane Points 4367

De la page de manuel de timeout (GNU coreutils 8.22) ...

--preserve-status
retourne avec le même statut que la COMMANDE, même lorsque la commande prend trop de temps

Alors votre commande serait

timeout --preserve-status 5 nc -w 5 bach; echo $?

Cependant, je viens de remarquer que la commande nc originale utilise l'option -w qui n'est pas ce que nous voulons ici. Cela dit à nc de fermer la connexion si elle est en attente et de ne pas abandonner si la connexion prend trop de temps.

L'option que nous voulons vraiment est -G qui définit le délai d'attente de la connexion TCP. Nous voulons aussi -w afin que la connexion se ferme (parce que nous n'envoyons rien).

Cela donne une commande nc simple de

nc -G 5 -w 5 bach; echo $?

Une approche alternative est simplement d'envoyer une ligne vide dans nc vers le serveur

echo | nc -G 5 bach; echo $?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X