![如何通过 SSH 运行脚本,使它在我关闭连接时不结束?](https://linux22.com/image/496535/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20SSH%20%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%8C%E4%BD%BF%E5%AE%83%E5%9C%A8%E6%88%91%E5%85%B3%E9%97%AD%E8%BF%9E%E6%8E%A5%E6%97%B6%E4%B8%8D%E7%BB%93%E6%9D%9F%EF%BC%9F.png)
我需要运行需要很长时间才能执行的脚本,或者我只是希望它永远运行下去。我不能直接通过 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
向该进程发送一个信号。