如何通过 SSH 运行脚本,使它在我关闭连接时不结束?

如何通过 SSH 运行脚本,使它在我关闭连接时不结束?

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

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

我正在使用 Ubuntu 9.04。

答案1

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

例如:

ssh mySever 'nohup bash myscript.sh'

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

Screen 有点复杂,但是花 20 分钟学习基础知识就可知道,它是最有用的工具之一。 这是一个教程

答案2

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

例子:

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

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

disown %1

答案3

安装屏幕:apt-get install screen

然后使用简单命令启动:screen

man screen获取按键绑定。

答案4

琐事: 命令名称nohup来自“hang-up”,就像挂断电话一样(当然是“黑色,旋转拨号”......)将耳机从柔软的支架上取下后,在 110 波特电传打字机上拨打电话。通常,当 Unix 检测到您“挂断电话”时,它会SIGHUP向该进程发送一个信号。

相关内容