问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

避免SSH断连:长时间运行程序的守护进程解决方案

创作时间:
作者:
@小白创作中心

避免SSH断连:长时间运行程序的守护进程解决方案

引用
CSDN
1.
https://blog.csdn.net/2402_84709675/article/details/144448050

在远程服务器上运行长时间任务时,SSH连接的稳定性是一个常见的问题。一旦连接中断,正在运行的程序可能会被迫终止,导致之前的努力付之东流。为了解决这一问题,本文将介绍两种常用的解决方案:使用JupyterLab的终端和screen工具,帮助你确保程序能够持续运行,不受SSH连接状态的影响。

当用户通过SSH登录或使用基于SSH的工具(如XShell、PyCharm、VSCode等)进行远程调试时,长时间运行的程序请务必以守护进程的方式执行,以避免因SSH连接中断而导致程序终止,造成不必要的损失。

有多种方式可以通过守护进程来执行程序

  1. screen,此外还有常用的tmux工具(如需安装执行:apt-get update && apt-get install -y tmux 这里不做介绍)
  2. Jupyterlab的终端(如果你使用的是Notebook,Notebook断网后日志更新问题将会更新在下方)

JupyterLab终端解决方案

最简单的方式是通过JupyterLab的终端来执行程序。只要JupyterLab不重启,终端将一直运行,即使本地主机断网或关机也是如此。

关闭的终端tab,可在左侧栏中找回

打开时如果终端未显示内容,按回车键即可。

在使用JupyterLab长时间跑代码的过程中强烈建议对日志重定向,防止断网后中间的日志丢失。

使用方法:

#日志重定向到train.log文件。  
python xxx.py > train.log 2>&1  
#实时查看日志  
tail -f train.log  

Notebook的日志不更新问题

可以使用「日志控制台」查看日志

打开日志控制台:

screen工具解决方案

screen是一个常用的终端复用工具,可以让你在断开SSH连接后,程序仍然在服务器上继续运行。以下是screen的基本使用方法:

1. 安装screen

在终端中执行:

apt-get update && apt-get install -y screen  

2. 创建一个新会话

终端中执行screen命令,然后在出来的界面按回车键,此时会出现和之前一样的终端页面。

echo "defencoding GBK" >>  ~/.screenrc  
echo "encoding UTF-8 GBK" >>  ~/.screenrc  

3. 离开会话

在用screen打开的终端中使用快捷键:ctrl + a +d,会退出到原终端,并且显示detached,意味着此会话只是离开并未退出。

4. 重进入会话

先找到所有离开的会话:

然后恢复到对应的会话:

执行完以上命令,我们会发现最开始执行的ping www.baidu.com仍然在执行。因此就可以将我们的程序放在screen的会话中执行,然后离开会话,等我们需要查看日志时再恢复。

5. 退回会话

在用screen打开的终端中使用快捷键:ctrl + d

如果有正在执行的程序,先ctrl + c终止程序

screen乱码问题

加上 -U 参数即可,比如

新建:screen -U  
恢复:screen -U -r xxx  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号