0

我正在远程服务器上运行两个测试,这是我几个小时前使用的命令:

% ./test1.sh; ./test2.sh

这两个测试应该一个接一个地运行。如果第二个在第一个完成之前运行,一切都将毁于一旦,我将不得不重新启动整个过程。

困境是,这两个任务花费了太多时间来完成,而当我准备注销服务器并等待结果时。我不知道如何将它们都切换到后台...如果我使用Ctrl+Z,则只有第一个任务将被挂起,而第二个任务在清除当前数据时开始无用。

是否可以将它们都切换到后台,保留它们的命令?实际上我应该在同一个进程组中完成这两个任务(./test1.sh; ./test2.sh) &,但遗憾的是,第一次测试已经运行了几个小时,很遗憾重新开始测试。

一种选择是在第二个测试开始之前杀死它,但是有什么机制可以解决这个问题吗?

4

2 回答 2

1

首先重命名./test2.sh./test3.sh. 然后做[CTRL+Z],然后是bgdisown -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 &

你可以注销。

于 2013-01-11T08:02:16.303 回答
0

首先,screentmux是您的朋友,如果您还没有使用它们(它们使远程机器工作更容易一个数量级)。

要使用条件连续执行,您可以编写:

./test1.sh && ./test2.sh

test2.sh仅当test1.sh返回 0时才会执行(通常意味着:没有错误)。例子:

$ 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

于 2013-01-11T07:50:35.870 回答