一、需求分析
通过SSH登录或者以SSH为基础的工具软件(例如xshell、pycharm、vscode等)长时间运行代码时,会出现SSH连接中断导致程序终止,导致训练失败。本文介绍一种方法解决此问题以供参考,此类方法也被广泛称为守护线程
二、守护线程的几种方式
- screen(本文重点介绍)
- tmux(如需安装执行:apt-get update && apt-get install -y tmux)工具,这里不做介绍
三、screen的具体用法
- 安装screen(在终端中执行命令)
apt-get update && apt-get install -y screen
- 使用方法
①创建一个新会话
终端中执行screen
命令,在该界面按回车键,此时会出现一个和之前完全一样的终端(实际上是两个),新出现的终端测试与百度的连通状态。
如果使用screen打开终端后中文乱码,顺序执行以下命令后重新进入screen终端。
echo "defencoding GBK" >> ~/.screenrc
echo "encoding UTF-8 GBK" >> ~/.screenrc
②离开回话
在用screen打开的终端中使用快捷键:ctl + a + d
,会退出到原终端,并且显示detached,意味着这个会话只是离开并未退出。
③找到离开的会话(终端)
找到之前所有离开的会话,命令为screen -ls
④重回会话
命令为screen -r xxx(xxx表示“终端”)
在本教程中即为上图的“ 2819.pts-0.autodl-container-60c311bc08-60374998”,此处请根据实际情况修改,
此时可以看到新“终端”不断ping百度,尽管退出但程序依然在执行,此方法适用于长时间运行在服务器的程序。因此就可以将我们的程序放在screen的会话中执行,然后离开会话,等我们需要看日志时再恢复到这个会话中。
④退出新“终端”,回到原始终端
在用screen打开的终端中使用快捷键:ctrl + d
。如果有正在执行的程序,先ctrl + c
终止程序
tips:screen乱码问题¶
加上-U参数即可,比如
新建:screen -U
恢复:screen -U -r xxx
四、其他情况
如果长时间在终端中运行代码建议对日志重定向,防止断网后中间的日志丢失,使用方法。
# 日志重定向到train.log文件。即在你的命令后加上:> train.log 2>&1
python xxx.py > train.log 2>&1
# 实时查看日志
tail -f train.log