J'essaie de trouver plus de façons de voir si un hôte donné est en place, en utilisant uniquement des commandes shell (principalement bash). Idéalement, il serait capable de fonctionner avec les noms d'hôte et les adresses IP. À l'heure actuelle, la seule façon native que je connaisse est le ping, peut-être intégré dans un script comme décrit ici. D'autres idées?
la source
answered
réponse. Le PO a expressément demandémore ways to see if a given host is up
, sauf avecping
, que cette réponse ne fournit pas."Because of the load it can impose on the network, it is unwise to use ping during normal operations or from automated scripts."
Ping est idéal pour obtenir une réponse rapide quant à savoir si l'hôte est connecté au réseau, mais il ne vous indiquera pas souvent si l'hôte est vivant ou non, ou s'il fonctionne toujours comme prévu. Cela est dû au fait que les réponses ping sont généralement gérées par le noyau, donc même si chaque application sur le système est tombée en panne (par exemple en raison d'une défaillance du disque ou d'un manque de mémoire), vous obtiendrez souvent des réponses ping et supposerez que la machine est fonctionne normalement lorsque la situation est tout à fait le contraire.
Vérification des services
Habituellement, vous ne vous souciez pas vraiment de savoir si un hôte est toujours en ligne ou non, ce qui vous importe vraiment, c'est de savoir si la machine effectue toujours une tâche. Donc, si vous pouvez vérifier la tâche directement, vous saurez que l'hôte est à la fois en place et que la tâche est toujours en cours d'exécution.
Pour un hôte distant qui exécute un serveur Web par exemple, vous pouvez faire quelque chose comme ceci:
S'il exécute SSH et que vous avez configuré des clés pour la connexion sans mot de passe, vous avez quelques options supplémentaires, par exemple:
Cela fonctionne en connectant SSH à l'hôte et en exécutant la
true
commande, puis en fermant la connexion. Lassh
commande ne renverra de succès que si cette commande a pu être exécutée avec succès.Tests à distance via SSH
Vous pouvez l'étendre pour vérifier des processus spécifiques, par exemple en vous assurant qu'il
mysqld
s'exécute sur la machine:Bien sûr, dans ce cas, vous feriez mieux d'exécuter quelque chose comme
monit
sur la cible pour vous assurer que le service continue de fonctionner, mais cela est utile dans les scripts où vous ne souhaitez effectuer qu'une tâche sur la machine A tant que la machine B est prête pour cela .Cela pourrait être quelque chose comme vérifier que la machine cible a un certain système de fichiers monté avant de lui faire un
rsync
, afin que vous ne remplissiez pas accidentellement son disque principal si un système de fichiers secondaire ne s'est pas monté pour une raison quelconque. Par exemple, cela s'assurera qu'il/mnt/raid
est monté sur la machine cible avant de continuer.Services sans client
Parfois, il n'y a pas de moyen facile de se connecter au service et vous voulez juste voir s'il accepte les connexions TCP entrantes, mais lorsque vous accédez
telnet
à la cible sur le port en question, il se trouve juste là et ne vous déconnecte pas, ce qui signifie que dans un script le ferait se bloquer.Bien que ce ne soit pas aussi propre, vous pouvez toujours le faire à l'aide des programmes
timeout
etnetcat
. Par exemple, cela vérifie si la machine accepte les connexions SMB / CIFS sur le port TCP 445, vous pouvez donc voir si elle exécute le partage de fichiers Windows même si vous n'avez pas de mot de passe pour vous connecter ou si les outils client CIFS ne sont pas '' t installé:la source