Jakub Arnold Asked: 2009-10-22 10:12:12 +0800 CST2009-10-22 10:12:12 +0800 CST 2009-10-22 10:12:12 +0800 CST 如何通过关闭连接时未结束的 SSH 运行脚本? 772 我需要运行脚本,这需要很长时间才能执行,或者我只想让它永远运行。我不能只通过 SSH 连接到我的机器,因为当我断开连接时它会停止运行。 有什么方法可以运行不依赖于启动它的 shell 的脚本吗? 我正在使用 Ubuntu 9.04。 ubuntu 6 个回答 Voted Best Answer Kyle Brandt 2009-10-22T10:13:41+08:002009-10-22T10:13:41+08:00 您可以在该命令之前使用 nohup 命令运行该命令。您也可以在“屏幕”中运行它,这将允许您重新连接终端。 例如: ssh mySever 'nohup bash myscript.sh' 或者只是 ssh 进入并运行 nohup 命令。即使您断开连接,它也应该继续运行。这是因为 nohup 会拦截 SIGHUP 信号(挂断)。 屏幕涉及更多,但在 20 分钟内可能需要您学习基础知识,它是目前最有用的工具之一。 这是一个教程。 m0j0 2009-10-22T12:54:43+08:002009-10-22T12:54:43+08:00 我总是只使用nohup。如果我关心输出,我将它重定向到一个日志文件,否则我将它发送到 /dev/null。 例子: nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 & 这会将其置于后台,输出到 /dev/null,如果您注销,它将不受 HUP 信号的影响。您还可以使用某些 shell(如 bash)“拒绝”该作业,以便它不会连接到您的会话。 disown %1 Disco 2009-10-22T10:16:29+08:002009-10-22T10:16:29+08:00 要安装屏幕:apt-get install screen 然后使用简单的启动:screen 并man screen获得密钥绑定。 Michael Dillon 2009-10-22T12:46:52+08:002009-10-22T12:46:52+08:00 当您登录到服务器时,您可以通过以下命令以分离模式运行脚本: nohup script >script.out 2>script.err & 稍后当您再次登录时,您可以检查 script.out 是否有任何输出,并检查 script.err 是否有任何错误消息。如果您希望在同一个文件中输出和错误消息,请执行以下操作: nohup script >script.out 2>&1 & Mike Robinson 2020-03-04T08:10:39+08:002020-03-04T08:10:39+08:00 琐事: 命令名称nohup来自“挂断”,就像在将耳机从柔软的支架上取下后挂断 110 波特电传打字机上的(当然,“黑色,旋转拨号”......)电话一样。通常,当 Unix 检测到您“挂断”时,它会向SIGHUP进程发送一个信号。 ijt 2020-02-27T23:00:03+08:002020-02-27T23:00:03+08:00 如果你想要一些你可以从客户端以非交互方式运行的东西,试试这个: ssh user@host 'command >out.log 2>err.log &' 例如: $ ssh user@host '(while true; do date; sleep 1; done) >/tmp/dates &' $ ssh user@host ... user@host$ tail -f /tmp/dates user@host$ ps -ef | grep dates 但是请注意,如果您不将输出重定向到文件,那么 ssh 调用将在命令完成之前不会完成。
您可以在该命令之前使用 nohup 命令运行该命令。您也可以在“屏幕”中运行它,这将允许您重新连接终端。
例如:
或者只是 ssh 进入并运行 nohup 命令。即使您断开连接,它也应该继续运行。这是因为 nohup 会拦截 SIGHUP 信号(挂断)。
屏幕涉及更多,但在 20 分钟内可能需要您学习基础知识,它是目前最有用的工具之一。 这是一个教程。
我总是只使用nohup。如果我关心输出,我将它重定向到一个日志文件,否则我将它发送到 /dev/null。
例子:
这会将其置于后台,输出到 /dev/null,如果您注销,它将不受 HUP 信号的影响。您还可以使用某些 shell(如 bash)“拒绝”该作业,以便它不会连接到您的会话。
要安装屏幕:
apt-get install screen
然后使用简单的启动:
screen
并
man screen
获得密钥绑定。当您登录到服务器时,您可以通过以下命令以分离模式运行脚本:
稍后当您再次登录时,您可以检查 script.out 是否有任何输出,并检查 script.err 是否有任何错误消息。如果您希望在同一个文件中输出和错误消息,请执行以下操作:
琐事: 命令名称
nohup
来自“挂断”,就像在将耳机从柔软的支架上取下后挂断 110 波特电传打字机上的(当然,“黑色,旋转拨号”......)电话一样。通常,当 Unix 检测到您“挂断”时,它会向SIGHUP
进程发送一个信号。如果你想要一些你可以从客户端以非交互方式运行的东西,试试这个:
例如:
但是请注意,如果您不将输出重定向到文件,那么 ssh 调用将在命令完成之前不会完成。