跳到主要内容
← 指南列表

关闭窗口后让程序继续运行(screen、tmux)

关闭 SSH 窗口后,在其中运行的程序也会一起停止。screen 或 tmux 会在服务器内创建“虚拟窗口”,即使断开 SSH 连接,程序也能继续运行。两者只需掌握其中一个即可。

像 Discord 机器人或 Web 应用这样需要始终保持运行、服务器重启后也要自动重新启动的程序,用 pm2 或 systemd 更合适。(24 小时托管 Discord 机器人(discord.js、discord.py)、将自己开发的 Web 应用部署到服务器)screen、tmux 适合需要在控制台中直接输入命令的游戏服务器,或耗时较长的任务。

screen

sudo apt install -y screen
screen -S work          # 创建一个名为 'work' 的窗口并进入

在这个窗口中运行需要的程序。

想做的事方法
保持程序运行并离开按 Ctrl + A 后再按 D
重新进入screen -r work
已创建的窗口列表screen -ls
彻底关闭窗口在窗口中输入 exit
向上滚动按 Ctrl + A 后再按 Esc,用方向键移动,按 Esc 结束

执行 screen -r 后如果显示 (Attached) 而无法进入,说明之前的 SSH 连接仍在占用它。用 screen -d -r work 进入即可。

tmux

sudo apt install -y tmux
tmux new -s work
想做的事方法
保持程序运行并离开按 Ctrl + B 后再按 D
重新进入tmux attach -t work
已创建的窗口列表tmux ls
彻底关闭窗口在窗口中输入 exit
向上滚动按 Ctrl + B 后再按 [,用方向键移动,按 q 结束

注意事项

  • 离开时如果按 Ctrl + C,程序会停止。请务必用 Ctrl + A, D(screen)或 Ctrl + B, D(tmux)离开。
  • 服务器重启后,screen、tmux 中的程序都会停止。如果想在重启后也自动启动,请使用 cron 的 @reboot 或 pm2、systemd。
  • 用 screen 运行 Minecraft 服务器的方法,在搭建 Minecraft 服务器(Java 版,Paper、原版)中也有介绍。

如果问题仍未解决,请在 Discord 提交工单。