我ssh到另一台服务器并运行像这样nohup ./script.sh 1>/dev/null 2>&1 &
然后键入exit退出服务器。然而它只是挂起。服务器是Solaris。
如何在不挂的情况下正确退出?
感谢。
答案 0 :(得分:7)
我认为这个脚本是一个长期运行的脚本。在这种情况下,您需要在终止ssh会话时从要关闭的终端分离进程。
实际上,您已经完成了大部分工作,将stdout
和stderr
重新分配给/dev/null
,但是您没有为stdin
执行此操作。
我使用了以下测试用例:
ssh localhost
nohup sleep 10m &> /dev/null &
^D
# hangs
虽然
ssh localhost
nohup sleep 10m &> /dev/null < /dev/null &
^D
# exits
我推荐使用优秀的gnu screen
,这将为您提供此服务。
哦,您是否考虑过直接运行脚本而不是shell?即:
ssh user@host script.sh
答案 1 :(得分:1)
如果您在关闭SSH链接后尝试远程运行命令,我强烈建议您使用screen
并学会分离屏幕。这比留下后台进程要好得多;它还可以让您重新连接并查看流程的最新动态。
由于您没有向我们提供script.sh
,我认为我们无法确定该命令为什么会挂起。
答案 2 :(得分:0)
sh -c ./script.sh &
答案 3 :(得分:0)
您可以使用命令:
~.
此命令关闭ssh会话。