为何nohup启动abc.sh挂起后def.sh未触发?求解决方案
问题分析与解决办法
嗨,你的问题根源在于ghi.sh里的命令没有正确分隔,导致shell解析出了问题。我来给你拆解一下:
原脚本里的这一行:
nohup /home/tomcat/automation/abc.sh & sleep 20 nohup /home/tomcat/automation/def.sh &
shell会这么理解它:
- 先启动
nohup abc.sh &——这部分是对的,abc.sh会后台运行 - 紧接着执行
sleep 20 nohup /home/tomcat/automation/def.sh &——这里就出问题了!sleep命令只需要一个数值参数,你把nohup当成了它的第二个参数,所以sleep会一直挂起等待正确输入,自然不会去执行后面的def.sh。
解决办法:给命令加正确的分隔符
你需要在每个独立命令之间添加分隔符,有两种简单的方式:
方式1:用分号分隔(单行写法)
修改ghi.sh为:
nohup /home/tomcat/automation/abc.sh & ; sleep 20 ; nohup /home/tomcat/automation/def.sh &
方式2:换行分隔(可读性更好,推荐)
把每个命令单独占一行,shell会自动识别为独立指令:
nohup /home/tomcat/automation/abc.sh & sleep 20 nohup /home/tomcat/automation/def.sh &
额外的优化建议
为了让脚本更健壮,还有几个小细节可以调整:
- 指定日志文件:默认情况下nohup会把输出写入当前目录的
nohup.out,如果多个脚本同时运行会导致日志混乱,建议给每个nohup命令指定单独的日志文件:
这里nohup /home/tomcat/automation/abc.sh > /home/tomcat/automation/abc.log 2>&1 & sleep 20 nohup /home/tomcat/automation/def.sh > /home/tomcat/automation/def.log 2>&1 &2>&1是把错误输出也重定向到日志文件,方便后续排查问题。 - 检查执行权限:确保abc.sh和def.sh有可执行权限,如果没有的话,先执行这条命令:
chmod +x /home/tomcat/automation/abc.sh /home/tomcat/automation/def.sh
这样修改后,运行ghi.sh应该就能正常先后启动abc.sh和def.sh了。
内容的提问来源于stack exchange,提问作者Anshika Jain
相关产品推荐
相关产品推荐

