Linux下nohup后台执行连续命令失败问题咨询
为什么第二个命令没执行?
核心原因是你只让nohup作用于第一个命令,后面的./command2不在nohup的执行序列和保护范围内。
你写的nohup ./command1 && ./command2 &中,nohup仅对./command1生效,&& ./command2是当前shell的后续命令逻辑。当整个命令串被&放到后台后,nohup启动command1后,后台shell的执行环境无法正确触发后续命令的执行,导致command2根本没被启动。用;的写法问题完全一样——nohup的作用范围还是只到第一个命令为止。
正确的写法
要让两个命令都在nohup保护下后台执行,需要把它们打包成一个整体交给nohup,推荐两种方式:
用
sh -c执行命令串:nohup sh -c './command1 && ./command2' &如果不管
command1执行成功与否都要运行command2,把&&换成;即可。用大括号包裹命令组(注意大括号前后的空格,以及最后命令后的分号):
nohup { ./command1 && ./command2; } &
这样nohup会作用于整个命令组合,两个命令会按顺序在后台执行,输出也会统一写入nohup.out(除非你手动重定向)。
内容的提问来源于stack exchange,提问作者H. Khani
相关产品推荐
相关产品推荐

