如何串联nohup命令使其按顺序依次执行?
解决顺序执行nohup命令的问题
你的问题出在命令的组合方式上:用&&连接的nohup命令,只有当前命令执行完成且退出状态为0时才会执行下一个;如果第一个命令退出状态非0,后续命令会直接被跳过。另外最后一个&只是把整个命令序列放到后台,并没有解决顺序执行的核心问题。
以下两种方法可以实现严格的顺序执行:
方法一:用单个nohup包裹命令序列
把所有要执行的命令打包成一个shell命令串,用bash -c执行,再用一个nohup把整个串后台运行,这样命令会按顺序依次执行:
nohup bash -c ' python3 foo.py 0 &> nohup-0-foo.out python3 foo.py 1 &> nohup-1-foo.out python3 foo.py 2 &> nohup-2-foo.out python3 foo.py 3 &> nohup-3-foo.out python3 foo.py 4 &> nohup-4-foo.out ' &
如果要求前一个命令执行成功才继续执行下一个,把换行替换成&&即可:
nohup bash -c ' python3 foo.py 0 &> nohup-0-foo.out && python3 foo.py 1 &> nohup-1-foo.out && python3 foo.py 2 &> nohup-2-foo.out && python3 foo.py 3 &> nohup-3-foo.out && python3 foo.py 4 &> nohup-4-foo.out ' &
方法二:逐个后台运行并等待完成
给每个nohup命令加&让它后台运行,然后用wait $!等待上一个进程完全结束后再执行下一个:
nohup python3 foo.py 0 &> nohup-0-foo.out & wait $! nohup python3 foo.py 1 &> nohup-1-foo.out & wait $! nohup python3 foo.py 2 &> nohup-2-foo.out & wait $! nohup python3 foo.py 3 &> nohup-3-foo.out & wait $! nohup python3 foo.py 4 &> nohup-4-foo.out &
这里$!代表上一个后台进程的PID,wait $!会阻塞到该进程结束,确保严格的执行顺序。
内容的提问来源于stack exchange,提问作者Bob van Luijt
相关产品推荐
相关产品推荐

