我正在远程服务器上运行两个测试,这是我几小时前使用的命令:
% ./test1.sh; ./test2.sh
这两个测试应该一个接一个地运行。如果第二个测试在第一个完成之前运行,那么一切都将破产,我将不得不重新开始整个过程。
困境是,这两个任务花费了太多时间来完成,当我准备注销服务器并等待结果时。我不知道如何将它们都切换到后台...如果我使用 Ctrl + Z ,只有第一个任务将被暂停,而第二个任务在擦除当前数据时没有任何用处。
是否可以将它们都切换到后台,保留订单?实际上我应该将这两项任务放在同一个流程组中,例如(./test1.sh; ./test2.sh) &
,但遗憾的是,第一次测试已经运行了几个小时,这是非常可惜的重启测试。
一个选项是在它开始之前杀死第二个测试,但有没有任何机制可以解决这个问题?
答案 0 :(得分:1)
首先将./test2.sh
重命名为./test3.sh
。然后执行[CTRL+Z]
,然后执行bg
和disown -h
。然后保存此脚本(test4.sh
):
while :; do
sleep 5;
pgrep -f test1.sh &> /dev/null
if [ $? -ne 0 ]; then
nohup ./test3.sh &
break
fi
done
然后执行:nohup ./test4.sh &
。
你可以退出。
答案 1 :(得分:0)
首先,screen或tmux是您的朋友,如果您还没有与他们合作(他们可以让远程机器工作更容易)。
要使用条件连续执行,您可以写:
./test1.sh && ./test2.sh
只有test2.sh
返回0才会执行test1.sh
(通常意味着:没有错误)。例如:
$ true && echo "first command was successful"
first command was successful
$ ! true && echo "ain't gonna happen"
有关控制运营商的更多信息:http://www.humbug.in/docs/the-linux-training-book/ch08s01.html