在我的bash脚本中,我正在运行ssh命令来重启设备:
ssh root@device reboot
在此之后,我想在发送更多ssh命令之前等待设备启动,否则它们将会丢失。
答案 0 :(得分:2)
如果设备运行Linux,您可以从procfs:
轮询启动ID#!/usr/bin/env bash
max_timeout=600
if ! { device_boot_id=$(ssh root@device "cat /proc/sys/kernel/random/boot_id") \
&& [[ $device_boot_id ]]; }; then
echo "Unable to retrieve initial boot ID -- is the device up to start with?" >&2
exit 1
fi
if ! ssh root@device "reboot"; then
echo "Attempt to ask device to reboot failed" >&2
exit 1
fi
timeout_at=$(( SECONDS + max_timeout ))
until new_boot_id=$(ssh root@device "cat /proc/sys/kernel/random/boot_id") \
&& [[ $new_boot_id != "$device_boot_id" ]]; do
if (( SECONDS > timeout_at )); then
echo "System is still not back; giving up" >&2
exit 1
fi
sleep 10
done
echo "System successfully rebooted" >&2
在其他系统上,您可以轮询正常运行时间 - 如果它发生故障,那么您就知道系统已重新启动。 (但是,如果系统已经足够长,以至于您能够在达到之前的启动正常运行时间之前连接并重新轮询,那么这只是可靠的。)