我试图运行下面的命令作为bash脚本的一部分,它假设打开ssh通道,在远程机器上运行该程序,将输出保存到文件10秒,杀死正在写入文件的进程,然后将控制权交还给bash脚本。从bash脚本中kill ssh或和远程进程
#!/bin/bash
ssh hostname '/root/bin/nodes-listener > /tmp/nodesListener.out </dev/null; sshpid=!$; sleep 10; kill -9 $sshpid 2>/dev/null &'
不幸的是,它似乎做的是在启动程序:远程节点监听器,但它从来没有得到任何进一步的,它不会把控制权交给了bash脚本。所以,停止执行的唯一方法是按Ctrl + C。
因为ssh并没有帮助(或者说不能执行),因为控制器没有使用bash脚本,因为它等待ssh会话中的命令完成,这当然不会发生,因为它必须是杀死停止。
谢谢。我的命令是bash脚本的一部分。为什么我需要指定它是明确的bash? – DOgl 2014-09-01 15:20:25
您的命令远程运行,由ssh触发。正如我所说的,ssh不会启动一个shell并在其中执行命令。它将简单地使用'execve'(或朋友)来执行命令。但是你的命令并不是更多的shell脚本。这就是为什么你需要在shell中执行它 – hek2mgl 2014-09-01 15:21:58
它抱怨:“sh:bash:找不到”如果我运行它 - bash -c – DOgl 2014-09-01 15:31:05