You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何nohup启动abc.sh挂起后def.sh未触发?求解决方案

问题分析与解决办法

嗨,你的问题根源在于ghi.sh里的命令没有正确分隔,导致shell解析出了问题。我来给你拆解一下:

原脚本里的这一行:

nohup /home/tomcat/automation/abc.sh & sleep 20 nohup /home/tomcat/automation/def.sh &

shell会这么理解它:

  1. 先启动nohup abc.sh &——这部分是对的,abc.sh会后台运行
  2. 紧接着执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:55:57