守护进程
如果你通过 SSH 远程连接(或使用基于 SSH 的工具,如 XShell、PyCharm、VSCode 等)来运行程序,请注意在正式长时间运行时应以守护进程方式启动任务,以避免因网络波动或 SSH 断开导致程序意外终止,造成不必要的损失。
有多种方式可以实现程序在后台持久运行,例如使用 screen
或 tmux
(如需安装可执行:apt-get update && apt-get install -y tmux
),以下我们主要介绍两种常用方法。
一、使用 JupyterLab 终端执行程序
Section titled “一、使用 JupyterLab 终端执行程序”如果你在使用 JupyterLab,其内置终端会话具备较强的稳定性,即使本地网络中断或关闭电脑,只要 JupyterLab 服务未重启(通常情况下很少发生),其中运行的命令仍会持续执行。

- 如果你关闭了终端标签页,仍可以在左侧文件导航栏的“Running Terminals”部分找回原有会话。

- 重新打开终端后若未见输出,按回车键即可激活显示。
建议在使用 JupyterLab 长时间运行任务时,将程序日志重定向到文件中,防止因暂时断开连接而导致中间日志丢失。具体操作如下:
python xxx.py > train.log 2>&1
tail -f train.log
二、使用 screen 工具管理会话
Section titled “二、使用 screen 工具管理会话”screen
是一款经典的终端复用工具,可以创建虚拟会话,即使在 SSH 断开后仍保持其中任务运行。
安装 screen:
Section titled “安装 screen:”apt-get update && apt-get install -y screen
创建新会话:
Section titled “创建新会话:”直接输入 screen
命令,按回车后会出现一个新终端界面,此时在该终端中执行的命令将受 screen 会话保护。
注意:初次使用 screen 时,新终端界面可能只显示一个简单的 #
或 $
提示符,并且输入常用命令(如 ping
、python
等)会提示 command not found
。这是因为默认启动的 Shell 环境配置不完整。
解决方法:此时只需手动输入 bash
并回车,即可启动一个功能完整的 Bash Shell。这个新 Shell 仍然完全处于 screen 会话的保护之下,您可以在此正常执行所有命令。为了后续使用方便,建议在 ~/.screenrc
配置文件中添加 shell -/bin/bash
来让 screen 默认直接启动 Bash。”

如果遇到中文字符显示乱码,可执行以下命令配置编码,并重新进入 screen:
echo "defencoding GBK" >> ~/.screenrcecho "encoding UTF-8 GBK" >> ~/.screenrc
临时离开当前会话:
Section titled “临时离开当前会话:”在 screen 终端中按下组合键 Ctrl + a + d
,即可“脱离”当前会话并返回原终端,屏幕会提示“detached”,表示该会话仍在后台运行。

重新接入原有会话:
Section titled “重新接入原有会话:”如需查看之前放在 screen 中运行的程序,可先查看现有会话列表:
screen -ls

然后使用如下命令恢复至指定会话:
screen -r <会话ID或名称>

你将回到原终端环境,并看到程序仍在持续执行。

退出并关闭 screen 会话:
Section titled “退出并关闭 screen 会话:”在 screen 终端内键入 Ctrl + d
即可结束当前会话。如仍有程序运行,请先使用 Ctrl + c
中断任务。
如果遇到中文显示问题,可在所有 screen 命令中加入 -U
参数以启用 UTF-8 编码支持,例如:
screen -U # 新建支持 Unicode 的会话screen -U -r xxx # 恢复某一会话
通过以上方式,你可以更安全地在远程服务器上运行长时间任务,无需担心连接稳定性带来的中断问题。