
shell 脚本中执行重启完成后继续执行其它的命令
2个回答
2014-10-21 · 知道合伙人软件行家
关注

展开全部
要用循环查询直到重启完成.
#!/bin/bash
service httpd status &> /dev/null
if [ $? -ne 0 ]; then
echo "HTTP Server is down. At time: `date`" >> /var/log/htmon.log
service httpd restart
while true
do
service httpd status &> /dev/null
[ $? -eq 0 ] && break
sleep 1
done
chkconfig --level 2345 httpd on
shutdown -r now
fi
追问
谢谢你的回答,有解决问题的思路了,但违背了原程序的意图。原程序意图为:1、当服务状态失常时在“/var/log/htmon.log”文件中记入日志;2、自动将状态失常的httpd服务重新启动;3、若重启httpd服务失败,则尝试重新启动服务器主机
但您改的程序是httpd启动成功($?为0)就跳出循环,再修改启动级别、重启操作系统(httpd启动成功就不需要这样做了),再则由于httpd配置错误启动不成功,则永远循环下去。还得请教有何办法?
回答
之前没理解你要做什么。
要防止无限循环,可以对尝试次数做个限制(加个计数器),比如10次尝试后还不成功就尝试修改启动级别并重启操作系统。
count=0
flag=0 #标志是否成功, 0-失败,1-成功
while [ $count -lt 10 ] #只尝试10次
do
let count+=1
service httpd status &> /dev/null
if [ $? -eq 0 ]; then
flag=1
break
fi
sleep 1
done
if [ $flag -eq 0 ]; then # httpd启动不成功
chkconfig --level 2345 httpd on
shutdown -r now
fi
#!/bin/bash
service httpd status &> /dev/null
if [ $? -ne 0 ]; then
echo "HTTP Server is down. At time: `date`" >> /var/log/htmon.log
service httpd restart
while true
do
service httpd status &> /dev/null
[ $? -eq 0 ] && break
sleep 1
done
chkconfig --level 2345 httpd on
shutdown -r now
fi
追问
谢谢你的回答,有解决问题的思路了,但违背了原程序的意图。原程序意图为:1、当服务状态失常时在“/var/log/htmon.log”文件中记入日志;2、自动将状态失常的httpd服务重新启动;3、若重启httpd服务失败,则尝试重新启动服务器主机
但您改的程序是httpd启动成功($?为0)就跳出循环,再修改启动级别、重启操作系统(httpd启动成功就不需要这样做了),再则由于httpd配置错误启动不成功,则永远循环下去。还得请教有何办法?
回答
之前没理解你要做什么。
要防止无限循环,可以对尝试次数做个限制(加个计数器),比如10次尝试后还不成功就尝试修改启动级别并重启操作系统。
count=0
flag=0 #标志是否成功, 0-失败,1-成功
while [ $count -lt 10 ] #只尝试10次
do
let count+=1
service httpd status &> /dev/null
if [ $? -eq 0 ]; then
flag=1
break
fi
sleep 1
done
if [ $flag -eq 0 ]; then # httpd启动不成功
chkconfig --level 2345 httpd on
shutdown -r now
fi
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询