我正在努力做
[me@myPc]$ ssh me@server "nohup myBashScript.sh &"
我的目标是在服务器上启动该进程,然后立即返回。
它不起作用:作业在服务器上启动了,但是我仍然在 myPc 上得到输出,并且 bash 等待完成然后再要求我输入另一个命令。
为什么?不应该这样!有什么办法可以避免吗?
- myPc 是
RHEL6.2
- 服务器
ubuntu 10.04
是 - 两次运行
openssh
答案1
只要输入或输出仍处于打开状态,ssh 就会保持连接打开。要解决此问题,请确保输入和输出未打开。
例如,使用ssh -n
并重定向您的输出:
ssh -n [email protected] "nohup myscript.sh >/dev/null 2>&1 &"
答案2
是否真的有必要nohup
通过 ssh 运行?在我的测试中,我没有发现使用 和不使用 运行命令有任何区别nohup
。看来 ssh 无论如何都不会发送 HUP。这与 一样有效nohup
:
ssh me@server "myBashScript.sh >/dev/null 2>&1 &"
解决方案的关键是重定向stdout
,stderr
正如已接受的答案中提到的那样。如果没有它,SSH 将从这些描述符中读取,并且仅在它们关闭后返回。