shell 脚本中执行重启完成后继续执行其它的命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 脚本中执行重启完成后继续执行其它的命令相关的知识,希望对你有一定的参考价值。

要用循环查询直到重启完成.

#!/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
参考技术A 重启后还有继续执行,只有在启动脚本里写了。追问

卸载启动脚本里岂不是每次启动都要执行啊

追答

是啊,每次启动都执行。
但你可以在脚本里做个判断,是否已重启过。
比如:
在重启前创建一个临时文件作为判断标记,重启后若判断文件存在,则知道已经做过了,不再重复做。

本回答被提问者采纳

以上是关于shell 脚本中执行重启完成后继续执行其它的命令的主要内容,如果未能解决你的问题,请参考以下文章

命令在控制台中能正常执行但在shell脚本中却无法执行?

shell多个脚本怎么并发执行

shell脚本执行kill命令后自动停止的问题

本地shell脚本中ssh到远程服务器并执行命令

wait命令

如何在shell脚本中,判断一个基本命令执行是不是成功