如何通过 ssh 启动远程进程并终止连接?

如何通过 ssh 启动远程进程并终止连接?

这仍然是阻塞的:

ssh host nohup cmd

这仍然使连接保持打开状态:

ssh host nohup cmd &

答案1

尝试这个:

ssh host batch cmd

答案2

您的示例中将&分离 ssh 命令,但不会分离远程程序。

这似乎有效:

ssh 远程主机'tail -f /var/log/syslog &'&

ssh remote-host 'tail -f /var/log/syslog > /dev/null &' &

第一个命令&将分离远程主机的命令,第二个命令&将分离 ssh 命令本身

在我的示例中,关闭连接后 tail 命令仍在运行。


编辑这似乎不起作用,因为tail连接实际上关闭后不久就会退出。

STDOUT这可能与以下事实有关:在连接关闭后,写入内容可能会引发管道损坏

编辑2将 tail 命令重定向到 /dev/null 时工作正常 ^_^

但要小心,不要写入 stderr / stdout,或将输出重定向到本地目标

答案3

这个问题显然由来已久(甚至比你的问题还要久!)。解决方案是重定向 stdout 和 stderr。教科书上的例子是这样的:

ssh server 'sleep 20 & exit'

它会挂起 20 秒。使用 bash 你可以将其重写为:

ssh server 'sleep 20 >/dev/null 2>&1 & exit'

这样就修复了这个问题。对于 tcsh,你可以使用类似下面的命令:

ssh server '(sleep 20 >/dev/null) >& /dev/null & exit'

参考

答案4

下列操作有效:

ssh myhost " nohup ./r.sh & " & sleep 2 ; kill -9 $! && echo

(至少在您没有被提示输入密码的情况下)。如果您被提示输入密码,我看不出有什么简单的方法可以做到这一点。

相关内容