关闭窗口后让程序继续运行(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、原版)中也有介绍。