让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