From 60587527c140523ec1e274a093a672991756a14f Mon Sep 17 00:00:00 2001 From: Chris Sosa Date: Wed, 12 Jan 2011 15:10:35 -0800 Subject: [PATCH] Add more robust ssh ping to be run on reboot for updates. Upon investigation it seems there's a race condition when ssh starts up the first time. This adds a much more robust way to ping a machine when it's up then the previous method. Change-Id: I092744b259c169975d1c4f283f01a556fce24723 BUG=chromium-os:10867 TEST=Ran it 30 times with image_to_live --noupdate --nostateful_update. Review URL: http://codereview.chromium.org/6115009 --- remote_access.sh | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/remote_access.sh b/remote_access.sh index 794deff8e7..8b8abf7a4e 100644 --- a/remote_access.sh +++ b/remote_access.sh @@ -34,8 +34,37 @@ function remote_sh() { return ${PIPESTATUS[0]} } +# Checks to see if pid $1 is running. +function is_pid_running() { + ps -p ${1} 2>&1 > /dev/null +} + +# Wait function given an additional timeout argument. +# $1 - pid to wait on. +# $2 - timeout to wait for. +function wait_with_timeout() { + local pid=$1 + local timeout=$2 + local -r TIMEOUT_INC=1 + local current_timeout=0 + while is_pid_running ${pid} && [ ${current_timeout} -lt ${timeout} ]; do + sleep ${TIMEOUT_INC} + current_timeout=$((current_timeout + TIMEOUT_INC)) + done + is_pid_running ${pid} +} + +# Robust ping that will monitor ssh and not hang even if ssh hangs. +function ping_ssh() { + remote_sh "true" & + local pid=$! + wait_with_timeout ${pid} 5 + ! kill -9 ${pid} 2> /dev/null +} + function remote_sh_allow_changed_host_key() { rm -f $TMP_KNOWN_HOSTS + ping_ssh remote_sh "$@" }