Skip to content
共绩算力文档中心

守护进程

如果你通过 SSH 远程连接(或使用基于 SSH 的工具,如 XShell、PyCharm、VSCode 等)来运行程序,请注意在正式长时间运行时应以守护进程方式启动任务,以避免因网络波动或 SSH 断开导致程序意外终止,造成不必要的损失。

有多种方式可以实现程序在后台持久运行,例如使用 screentmux(如需安装可执行:apt-get update && apt-get install -y tmux),以下我们主要介绍两种常用方法。


一、使用 JupyterLab 终端执行程序

Section titled “一、使用 JupyterLab 终端执行程序”

如果你在使用 JupyterLab,其内置终端会话具备较强的稳定性,即使本地网络中断或关闭电脑,只要 JupyterLab 服务未重启(通常情况下很少发生),其中运行的命令仍会持续执行。

  • 如果你关闭了终端标签页,仍可以在左侧文件导航栏的“Running Terminals”部分找回原有会话。
  • 重新打开终端后若未见输出,按回车键即可激活显示。

建议在使用 JupyterLab 长时间运行任务时,将程序日志重定向到文件中,防止因暂时断开连接而导致中间日志丢失。具体操作如下:

Terminal window
python xxx.py > train.log 2>&1
tail -f train.log

screen 是一款经典的终端复用工具,可以创建虚拟会话,即使在 SSH 断开后仍保持其中任务运行。

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

直接输入 screen 命令,按回车后会出现一个新终端界面,此时在该终端中执行的命令将受 screen 会话保护。

注意:初次使用 screen 时,新终端界面可能只显示一个简单的 #$ 提示符,并且输入常用命令(如 pingpython 等)会提示 command not found。这是因为默认启动的 Shell 环境配置不完整。

解决方法:此时只需手动输入 bash 并回车,即可启动一个功能完整的 Bash Shell。这个新 Shell 仍然完全处于 screen 会话的保护之下,您可以在此正常执行所有命令。为了后续使用方便,建议在 ~/.screenrc 配置文件中添加 shell -/bin/bash 来让 screen 默认直接启动 Bash。”

如果遇到中文字符显示乱码,可执行以下命令配置编码,并重新进入 screen:

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

在 screen 终端中按下组合键 Ctrl + a + d,即可“脱离”当前会话并返回原终端,屏幕会提示“detached”,表示该会话仍在后台运行。

如需查看之前放在 screen 中运行的程序,可先查看现有会话列表:

Terminal window
screen -ls

然后使用如下命令恢复至指定会话:

Terminal window
screen -r <会话ID或名称>

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

在 screen 终端内键入 Ctrl + d 即可结束当前会话。如仍有程序运行,请先使用 Ctrl + c 中断任务。

如果遇到中文显示问题,可在所有 screen 命令中加入 -U 参数以启用 UTF-8 编码支持,例如:

Terminal window
screen -U # 新建支持 Unicode 的会话
screen -U -r xxx # 恢复某一会话

通过以上方式,你可以更安全地在远程服务器上运行长时间任务,无需担心连接稳定性带来的中断问题。