Screen 命令 -- 会话管理
问题与需求
Screen 有不少功能,但我使用的并不多,毕竟需要解决的问题只是保持终端。
因 Windows 自动更新、网络中断、软件崩溃等原因造成终端丢失
终端丢失后,运行中的操作就失去了控制,不知何时会停止,也不知能否完成。我们可以 kill 单进程任务,然后重新开始,但像编译软件这种多进程任务就束手无策,难以理清需要 kill 的进程,只能等待足够的时间,确保被任务被中断或完成,然后重新开始。
运行程序时,需要保持 SSH 终端
通过保持 SSH 终端来保证软件运行,这本身并不合理。优秀的软件理应可以运行在后台,使用 cli 交互,通过 log 输出有用的信息,但这只能是少数情况。
PS: & 符号可以让软件后台运行,但终端断开后,进程依然会被中断,参见信号与进程。
Screen 介绍
Screen 给出的方案是在服务器本地创建并管理会话,在 SSH 登陆后,再登陆 Screen 会话。
Screen 安装
Ubuntu/Debian 等发行版
sudo apt install screen
CentOS/Fedora 等发行版
sudo yum install screen如果输出 No match for argument: screen,则需添加相应的 yum 源:
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
输入显示版本命令,进行安装确认:
screen --version
命令输出
Screen version 4.08.00 (GNU) 05-Feb-20
其他发行版安装参见:https://command-not-found.com/screen
Screen 基础
创建会话
直接运行命令
screen也可以使用 -S 选项指定会话名
screen -S session_name
登出会话
Screen 使用组合按键,按住 ctrl 后,依次按下 a 与 d 按键
Ctrl + a + d
查看会话
screen -ls
命令输出
There are screens on: 367315.session_name (11/21/2021 11:09:42 PM) (Detached) 367118.pts-0.zpxli5mhbj9eiu1b (11/21/2021 11:09:09 PM) (Attached) 2 Sockets in /run/screen/S-root.
登录会话
会话 id、会话名或两者的组合均可用于指定将要登录的会话,以下命令三选其一。
screen -r 367315screen -r session_namescreen -r 367315.session_name对于 Attached 会话需要添加 -D 选项,踢人后再登陆。
screen -D -r session_name
删除会话
直接输入 exit 即可删除会话。
PS: Screen 开启多窗口时,从最后一个窗口退出才会删除会话,目前只有单个窗口。