如何通过关闭连接时不会结束的SSH运行脚本?


18

我需要运行脚本,这需要很长时间才能执行,或者我只希望它永远运行。我不能仅通过SSH连接到我的计算机,因为当我断开连接时,它会停止运行。

有什么方法可以运行不依赖于启动它的外壳程序的脚本?

我正在使用Ubuntu 9.04。

Answers:


24

您可以在命令之前使用nohup命令。您也可以在“屏幕”中运行它,以便重新连接终端。

例如:

ssh mySever 'nohup bash myscript.sh'

或者只是ssh进入并运行nohup命令。即使断开连接,它也应继续运行。这是因为nohup将拦截SIGHUP信号(挂断)。

屏幕涉及更多一点,但是在20分钟内您可能需要学习基本知识,它是其中最有用的工具之一。 这是一个教程


凯尔狙击...>微笑<
埃文安德森

向任何狙击埃文的人+1。10K欢乐:)
squillman

1
教程的链接已损坏:(
Ido Ran 2018年

7

我总是只使用nohup。如果我关心输出,则将其重定向到日志文件,否则将其发送到/ dev / null。

例:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

它将其置于后台,输出将发送到/ dev / null,并且如果您注销,则不受HUP信号的影响。您还可以使用某些shell(例如bash)“放弃”该作业,以使其不连接到您的会话。

disown %1

1
+1表示拒绝-当您忘记使用nohup进行跑步时非常有用
Mark


2

登录服务器后,可以通过以下命令以分离模式运行脚本:

nohup script >script.out 2>script.err &

稍后,当您再次登录时,可以检查script.out的任何输出,以及script.err的任何错误消息。如果要将输出和错误消息保存在同一文件中,请执行以下操作:

nohup script >script.out 2>&1 &
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.