如何通过SSH运行脚本,当我closures连接时不会结束?

我需要运行脚本,这需要很长时间来执行,或者我只是希望它永远运行。 我不能只是SSH到我的机器,因为当我断开它停止运行。

有什么办法可以运行不依赖于启动它的shell的脚本吗?

我正在使用Ubuntu 9.04。

您可以在它之前使用nohup命令运行命令。 您也可以在“屏幕”中运行它,这将允许您重新连接terminal。

例如:

ssh mySever 'nohup bash myscript.sh' 

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

屏幕是一个更多的参与,但20分钟,它可能需要你学习的基本知识,它是那里最有用的工具之一。 这是一个教程 。

我总是用nohup。 如果我关心输出,我将它redirect到一个日志文件,否则我把它发送到/ dev / null。

例:

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

这就把它放在后台,输出到/ dev / null,如果你注销,HUP信号是免疫的。 你也可以用某些shell(比如bash)“disown”这个工作,这样它就不会连接到你的session。

 disown %1 

安装屏幕: apt-get install screen

然后简单地启动: screen

man screen来获取密钥绑定。

在login到服务器时,可以通过以下命令以分离模式运行脚本:

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

稍后再次login时,可以检查script.out是否有输出,script.err是否有错误信息。 如果你想在同一个文件中输出和错误消息,那么做:

 nohup script >script.out 2>&1 &