I want a bash script that'll do:
for c in computers: do ping $c if ping is sucessfull: ssh $c 'check something' done
If I only do
ssh and the computer is iresponsive, it takes forever for the timeout. So I was thinking of using the output of
ping to see if the computer is alive or not. How do I do that? Other ideas will be great also
ping's return value:
for C in computers; do ping -q -c 1 $C && ssh $C 'check something' done
ping will exit with value 0 if that single ping (
-c 1) succceeds. On a ping timeout, or if
$C cannot be resolved, it will exit with a non-zero value.
-w switch (or
-t on FreeBSD and OS X) on the
ping command, then inspect the command's return value.
ping -w 1 $c RETVAL=$? if [ $RETVAL -eq 0 ]; then ssh $c 'check something' fi
You may want to adjust the parameter you pass with
-w if the hosts you're connecting to are far away and the latency is higher.
-w deadline Specify a timeout, in seconds, before ping exits regardless of how many packets have been sent or received. In this case ping does not stop after count packet are sent, it waits either for deadline expire or until count probes are answered or for some error notification from network.