1

我的脚本是:

for i in $(seq $nb_lignes) a list of machines
do
ssh root@$machine -x "java ....." 
sleep 10
done

--> 我从机器 C 执行这个脚本

我有两台机器 A 和 B ($nb_lignes=2)

ssh root@$machineA -x "java ....." : create a node with Pastry overlay 
wait 10 secondes
ssh root@$machineB -x "java .....":create another node join the first (that's way i     have use sleep 10 secondes)

我从机器 C 运行脚本:我希望它显示:节点 1 已创建,等待 10 秒并显示节点 2 已创建

我的问题:它显示节点 1 仅创建

i 磁带 ctrl+c 它显示节点 2 已创建

PS:两个进程java仍在机器A和B中运行

谢谢

4

2 回答 2

2

从我读这篇文章的方式来看,阿玛尼是正确的;由于您的 java 程序没有退出,因此循环的第二次迭代不会运行,直到您“中断”第一个迭代。我猜Java程序忽略了ssh发送给它的中断信号。

&您最好使用 ssh 本身提供给您的工具,而不是使用 . 从 ssh 手册页:

 -f      Requests ssh to go to background just before command execution.
         This is useful if ssh is going to ask for passwords or
         passphrases, but the user wants it in the background.  This
         implies -n.  The recommended way to start X11 programs at a
         remote site is with something like ssh -f host xterm.

所以......你的脚本看起来像这样:

for host in machineA machineB; do
    ssh -x -f root@${host} "java ....." 
    sleep 10
done
于 2012-10-10T23:37:40.810 回答
1

在“ssh”命令后尝试“&”字符。这会单独生成进程 [背景] 并继续执行脚本。

否则,您的脚本会卡在运行 ssh。

编辑:为清楚起见,这将是您的脚本:

for i in $(seq $nb_lignes) a list of machines
do
ssh root@$machine -x "java ....." &
sleep 10
done
于 2012-10-10T19:34:16.257 回答