【发布时间】:2011-03-24 13:54:59
【问题描述】:
我 ssh 到另一台服务器并运行类似 nohup ./script.sh 1>/dev/null 2>&1 & 的 shell 脚本
然后输入exit 退出服务器。然而它只是挂起。服务器是 Solaris。
如何才能不挂机正确退出??
谢谢。
【问题讨论】:
-
脚本只是几千个 curl 命令。
我 ssh 到另一台服务器并运行类似 nohup ./script.sh 1>/dev/null 2>&1 & 的 shell 脚本
然后输入exit 退出服务器。然而它只是挂起。服务器是 Solaris。
如何才能不挂机正确退出??
谢谢。
【问题讨论】:
我假设这个脚本是一个长期运行的脚本。在这种情况下,您需要在终止 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
【讨论】:
如果您在关闭 SSH 链接后尝试让命令远程运行,我强烈建议您使用 screen 并学习分离屏幕。这比留下后台进程要好得多;它还可以让您重新连接并查看进程正在执行的操作。
由于您尚未向我们提供script.sh,我认为我们无法确定该命令为何挂起。
【讨论】:
你可以使用命令:
~.
此命令关闭 ssh 会话。
【讨论】:
sh -c ./script.sh &
【讨论】: