保持进程在SSH客户端断开后仍继续运行的方法

使用SCREEN让客户端断开之后仍然执行命令。

安装

1
sudo apt-get install -y screen

使用

  1. 创建并进入新会话。
1
screen -S [Name]  # [Name]为自定义会话名称。
  1. 在新会话中执行目标任务。
  2. 分离会话。 同时按下Ctrl+A+D键,分离当前 screen 会话,此时进程在SSH客户端断开后仍可继续运行。
  3. 恢复会话。
    • 查看会话进程PID,用于后续恢复。
      1
      2
      3
      4
      5
      6
      sudo screen -ls

      # 输出:
      There is a screen on:
      2046.mytask (Detached)
      1 Socket in /run/screen/S-root.
      示例中screen会话进程PID为2046。
    • 恢复对后台任务的控制。
      1
      screen -r -d [PID]
  4. 注销会话。
    1
    kill [PID]

使用conda建立了虚拟环境的话需要注意,会出现环境不起作用的问题。

需要在进入screen前先退出环境:

1
source deactivate # 或conda deactivate

然后进入screen

1
screen -r my_screen

在screen里面激活环境:

1
source activate env
这时conda环境才会起作用。