让ssh在目标机器的后台执行一个命令

这是一个关于如何在shell脚本中使用ssh的后续问题? 题。 如果我想在该机器的后台运行的远程机器上执行命令,我如何获得ssh命令返回? 当我试图在命令的末尾添加&符号(&)时,它会挂起。 命令的确切形式如下所示:

ssh user@target "cd /some/directory; program-to-execute &"

有任何想法吗? 需要注意的一点是,登录到目标机器总是生成一个文本标题,并且我设置了SSH密钥,因此不需要密码。


我在一年前编写的程序中遇到了这个问题 - 事实证明答案相当复杂。 您将需要使用nohup以及输出重定向,如nohup上的维基百科artcle所解释的,在这里复制以方便您。

Nohuping后台作业在通过SSH登录时非常有用,因为后台作业可能会导致shell在注销时由于竞争条件而挂起[2]。 这个问题也可以通过重定向所有三个I / O流来解决:

nohup myprogram > foo.out 2> foo.err < /dev/null &

这对我来说是最干净的方式: -

ssh -n -f user@host "sh -c 'cd /whereever; nohup ./whatever > /dev/null 2>&1 &'"

在此之后运行的唯一一件事是远程计算机上的实际命令


重定向fd's

输出需要用&>/dev/null重定向,它将stderr和stdout重定向到/ dev / null,并且是>/dev/null 2>/dev/null>/dev/null 2>&1的同义词。

括号

最好的方法是使用sh -c '( ( command ) & )' ,其中命令是任何东西。

ssh askapache 'sh -c "( ( nohup chown -R ask:ask /www/askapache.com &>/dev/null ) & )"'

Nohup壳牌

您也可以直接使用nohup来启动shell:

ssh askapache 'nohup sh -c "( ( chown -R ask:ask /www/askapache.com &>/dev/null ) & )"'

尼斯推出

另一个诀窍是使用nice来启动命令/ shell:

ssh askapache 'nice -n 19 sh -c "( ( nohup chown -R ask:ask /www/askapache.com &>/dev/null ) & )"'
链接地址: http://www.djcxy.com/p/17503.html

上一篇: Getting ssh to execute a command in the background on target machine

下一篇: terminal will not be allocated because stdin is not a terminal