这是一个后续的问题,你如何使用ssh在一个shell脚本?的问题。如果我想在远程机器上执行在后台运行的命令,如何返回ssh命令?当我试图在命令末尾只包含&号时,它就挂起了。命令的确切形式如下所示:
ssh user@target "cd /some/directory; program-to-execute &"
什么好主意吗?需要注意的一件事是,登录到目标机器总是产生一个文本横幅,我设置了SSH密钥,所以不需要密码。
这是一个后续的问题,你如何使用ssh在一个shell脚本?的问题。如果我想在远程机器上执行在后台运行的命令,如何返回ssh命令?当我试图在命令末尾只包含&号时,它就挂起了。命令的确切形式如下所示:
ssh user@target "cd /some/directory; program-to-execute &"
什么好主意吗?需要注意的一件事是,登录到目标机器总是产生一个文本横幅,我设置了SSH密钥,所以不需要密码。
当前回答
我只是想展示一个你可以剪切和粘贴的工作示例:
ssh REMOTE "sh -c \"(nohup sleep 30; touch nohup-exit) > /dev/null &\""
其他回答
这对我来说很有效:
ssh -x remoteServer "cd yourRemoteDir; ./yourRemoteScript.sh </dev/null >/dev/null 2>&1 & "
如果使用zsh,则使用程序执行&!是zsh特定于后台和否认进程的快捷方式,这样退出shell将使其继续运行。
@cmcginty简洁的工作示例的后续内容,该示例还展示了如何用双引号替换外部命令。这是在PowerShell脚本中调用模板的样子(该脚本只能从双引号中插入变量,而忽略单引号中包装的任何变量展开):
ssh user@server "sh -c `"($cmd) &>/dev/null </dev/null &`""
内双引号用反标记而不是反斜杠进行转义。这允许$cmd由PowerShell脚本组成,例如用于部署脚本和自动化等。如果使用unix LF组合,$cmd甚至可以包含多行heredoc。
我只是想展示一个你可以剪切和粘贴的工作示例:
ssh REMOTE "sh -c \"(nohup sleep 30; touch nohup-exit) > /dev/null &\""
你可以这样做……
sudo /home/script.sh -opt1 > /tmp/script.out &