我目前正忙于创建脚本以远程启动服务器(使用CentOS 6.x和CentOS 7.x)。到目前为止,该脚本正在运行,但是挂在一件小事上。好吧,它实际上并没有挂起,但是没有提供有关正在发生的事情的详细信息。换句话说,我无法在bash中获得有关正确完成作业的正确信息。
我已经尝试了各种方法,但是它与以下消息挂在一起(不断重复):
servername is still installing and configuring packages...
PING 100.125.150.175 (100.125.150.175) 56(84) bytes of data.
64 bytes from 100.125.150.175: icmp_seq=1 ttl=63 time=0.152 ms
64 bytes from 100.125.150.175: icmp_seq=2 ttl=63 time=0.157 ms
64 bytes from 100.125.150.175: icmp_seq=3 ttl=63 time=0.157 ms
64 bytes from 100.125.150.175: icmp_seq=4 ttl=63 time=0.143 ms
64 bytes from 100.125.150.175: icmp_seq=5 ttl=63 time=0.182 ms
--- 100.125.150.175 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 120025ms
rtt min/avg/max/mdev = 0.143/0.158/0.182/0.015 ms
servername is still installing and configuring packages...
PING 100.125.150.175 (100.125.150.175) 56(84) bytes of data.
64 bytes from 100.125.150.175: icmp_seq=1 ttl=63 time=0.153 ms
64 bytes from 100.125.150.175: icmp_seq=2 ttl=63 time=0.132 ms
64 bytes from 100.125.150.175: icmp_seq=3 ttl=63 time=0.142 ms
etc....
因此由于某种原因,它不会转换到下一行代码或执行下一个操作。由于它只是反馈给我(或其他用户),因此不是主要问题。但是,最好能获得此功能并提供(详细)有关当前进度或脚本/服务器当前实际操作的信息。不幸的是,以上(最后)代码不是这种情况。
这是我当前拥有的代码段(是的,很烂):
while true;
do
#ping -c3 -i3 $HWNODEIP > /dev/null
#ping -c5 -i30 $HWNODEIP > /dev/null
ping -c5 -i30 $HWNODEIP
if [ $? -eq 1 ] || [ $? -eq 2 ] || [ $? -eq 68 ]
then
echo -e " "
echo -e "Kickstart part II also done. $HOSTNAME will be rebooted one more time."
sleep 5
######return 0
echo -e " "
printf "%s" "Waiting for $HOSTNAME to come back online: "
while ! ping -c 1 -n -w 30 $HWNODEIP &> /dev/null
do
printf "%c" "."
#sleep 10
done
echo -e " "
echo -e "Reboot is done and $HOSTNAME is back online. Performing final check. Please wait..."
sleep 10
echo -e " "
sudo /usr/local/collectHWdata.pl $HWNODEIP
ssh root@$HWNODEIP "while ! test -e /root/kickstart-DONE; do sleep 3; done; echo KICKSTART IS DONE\!"
echo -e " "
exit
else
echo -e " "
echo -e "$HOSTNAME is still installing and configuring packages..."
fi
done
侧注:我删除了/ dev / null#5进行调试(并非有帮助)
我猜我使用的东西不正确,我绝不是经验丰富的脚本编写者;我只能做些小事,但我当然会尽力而为。自上周以来,我一直在鬼混,至今仍没有结果。
在选定的CentOS版本之后,服务器将重新引导,创建分区并设置网络。所有这一切。上面的代码段是在重启之后。现在它将安装我选择的软件包,配置各种东西(例如Nagios)并安装/编译某些PERL模块。还有其他一些小事。
这在后台正确完成。我想制作服务器仍在忙于安装东西之类的脚本(上面的代码)。由于我缺乏这样做的知识,因此我决定采用其他方法。检查服务器是否在线(换句话说,它仍在安装)。只要服务器在线,它显然仍在安装/配置东西。完成之后,服务器将再次重新启动以执行最后两个命令(如我的代码片段所示)。但是(这是问题所在),尽管kickstart已完全完成,但它从不执行那些命令。
所以我想我做错了什么,甚至可能弄乱了事情(或因此而感到困惑)。也许有人有解决这个问题的想法,解决方案或完全不同的方法(或者至少我希望如此)。
到目前为止我还尝试了其他东西吗?好吧,我尝试了各种ping命令,还尝试了nc(netcat),但也没有很好的结果。我每次都用最后2个命令碰到一堵砖墙,并且它一直在发出声响,而不是显示kickstart已经完成...我想我已经花了几个小时(自上周以来),却一无所获。
因此,我希望有人可以看一下并告诉我我做错了什么,也许还有更好的方法(除了对服务器执行ping操作外)来查看它是否仍然很忙。也许(远程)检查yum,perl或服务,以便脚本知道它仍然很忙。
很长的帖子,很抱歉,但是我知道当我提供尽可能多的信息(包括代码示例和结果)时,这会变得“赏识”。所以我希望我能提供足够的信息。如果没有,请告诉我。我将尝试添加尽可能多的信息。一如既往,我总是愿意学习或改变自己的方法。
已经感谢您阅读我的帖子!
答案 0 :(得分:1)
问题下的评论中指出:
在ping -c5 -i30 $HWNODEIP
完成时,服务器可能已经重新启动。该命令发送5个数据包(-c
标志),每个数据包之间等待30秒(-i interval
标志)。因此,那是5 * 30 = 150秒,比2分钟多一点。服务器可以在2分钟内重新启动,尤其是在使用SSD的情况下。因此,请尝试减少此命令完成所需的总时间。
[ $? -eq 68 ]
可能是不必要的。 $HWNODEIP
只是IP地址,exit code 68 is for domain name尚未解析,不适用于IP地址。
if
语句可以简化为
if ! ping -c5 -i30 "$HWNODEIP"
这些是次要建议,可能不是防弹的。正如OP在评论中所确认的,降低间隔时间很有帮助。还可以进行其他一些小的改进(例如引用变量),但这超出了问题的范围,因此,我暂时将其保留。