如何使用screen

本文介绍如何使用screen命令在Linux服务器上实现长时间任务的持续执行,即使在断开SSH连接的情况下也能保持任务运行。通过配置screen命令和ssh自动登录,可以创建多个虚拟终端窗口,方便在本地或远程服务器上进行多任务管理。

screen是什么

也许你遇到过使用telnet或SSH远程登录linux,运行一些程序。如果这些程序需要运行很长时间(几个小时),而程序运行过程中出现网络故障,或者客户机故障,这时候客户机与远程服务器的链接将终端,并且远程服务器没有正常结束的命令将被迫终止。

又比如你SSH到主机上后,开始批量的scp命令,如果这个ssh线程断线了,scp进程就中断了。在远程服务器上正在运行某些耗时的作业,但是工作还没做完快要下班了,退出的话就会中断操作了,如何才好呢?

我们利用screen命令可以很好的解决这个问题。实现在断开SSH的情况下,在服务器上继续执行程序。

那什么是screen命令?

Screen被称之为一个全屏窗口管理器,用他可以轻松在一个物理终端上获得多个虚拟终端的效果。

Screen功能说明

简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器,这意味着你能够使用一个单一的终端窗口运行多终端的应用。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。

当你使用多标签终端管理器,比如secureCRT的时候,也许会使用自动登录,或者每台服务器打开一个标签页,来回切换,有没有觉得都很麻烦呢,如果能一直保持着会话,不用每次都登陆或者切换,岂不是很方便,好吧,我建议你使用screen

什么情况下使用screen

除了上面说的之外,还需要一些必要条件,比如有人问那我能不能screen运行在本机,答案当然是可以,不过它本身就是一个程序,关机后进程都会被kill掉,screen自然也会断开所有链接,除非你自己的pc或者笔记本永不关机呵呵,不过那是不可能的,所以,还是使用中转服务器吧,比如在公司和企业里的开发测试人员用的那种,一般情况下不会随随便便关机的,而且比较稳定。

开始使用screen

  1. 首先要找到常年不关机并且稳定的机器(一般是自己的开发测试机),比如我们这里找到一台机器hostname为myserver,ip为192.168.1.101,我自己的机器ip为192.168.1.100
  2. 从你的本机ssh到myserver机器“ssh myserver/ssh 192.168.1.101” (建议打通ssh,参见: 设置 SSH 自动登陆
  3. 假设myserver上你的个人目录为/home/taozi ,编辑文件/home/taozi/.screenrc ,内容如下:
  4. 01 #escape "^Tt"
    02  
    03 #screen -t Shell 0
    04 #screen -t Emacs 1 emacs -nw
    05 #screen -t Bash  2 bash
    06 #select 0
    07 #kill
    08 #select 1
    09 vbell off
    10 autodetach on
    11 defscrollback 5000
    12 #allpartial on
    13 #partial on
    14  
    15 #termcapinfo xterm ti@:te@
    16  
    17 shelltitle "$|bash"
    18  
    19 #caption always "%{wb} %-w%{+b bw}%n %t%{-}%+w"
    20  
    21 hardstatus on
    22 hardstatus alwayslastline
    23 # hardstatus string "%{.kW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "
    24 # hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m/%d/%Y %{W}%c:%s %{g}]'
    25 hardstatus string '%{= kG} %{G}%H %{g}[%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}]%{B} %{W}%c %{g}'
    26  
    27 bind g
    28 bind ^g
    29 bind L
    30  
    31 #term screen-256color
    32 term xterm
    33 # attrcolor b ".I"
    34 # bce on
    35  
    36 altscreen on
    37  
    38 defwrap on
    39 defflow off # for emacs C-x C-s
    40 # encoding GBK GBK
    41 encoding UTF8 UTF8
    42  
    43 shell -$SHELL
  5. 为了防止ssh无操作或超时自动断开,我们做如下配置,编辑文件/home/taozi/.ssh/config
    TCPKeepAlive yes
    ServerAliveInterval 50
    ServerAliveCountMax 6
    
  6. 退出myserver,然后重新从本机ssh过去。
  7. 执行screen -S taozi_test (S为大写,taozi_test为你的screen名称,可自定义)
  8. 如无意外,可以看到我们已经进入screen的终端界面了,底部会显示当前的会话和时间
  9. 执行ctrl+a c ,可以看到新建了一个shell窗口,此时底部显示 0-$ bash (1*$bash)
  10. 不同shell窗口用数字表示,比如0,1,2 … , “-”表示上一个shell窗口, “*”表示当前所在的shell窗口
  11. 不同窗口之间切换使用ctrl+a n (n表示窗口的数字序号)
  12. 使用ctrl+a shift+a 可以重命名当前shell窗口的名字,便于快速切换
  13. 执行ctrl+a d ,可以退出screen(但是shell窗口和连接依然存在的),同时屏幕显示[detached] ,表示已经保存了当前screen
  14. 执行screen -ls ,可以查看当前所有screen的连接
  15. 执行screen -r taozi_test , 可以恢复screen界面

screen快捷键及其他功能

screen窗口内操作

  • ctrl+a c:创建一个新的 window(可理解为shell窗口)
  • ctrl+a ctrl-a:在 Shell 间切换
  • ctrl+a n:切换到下一个 Shell
  • ctrl+a p:切换到上一个 Shell
  • ctrl+a 0…9:切换到指定 Shell
  • ctrl+a d:退出 Screen 会话
  • ctrl+a [ : 进入copy 模式,和vi一样使用
  • ctrl+a shift+s : 切分窗口
  • ctrl+a tab : 切分的窗口间切换
  • ctrl+a shift+x : 关闭切分的窗口

screen本身的操作

  • screen -S yourname -> 新建一个叫yourname的session
  • screen -ls -> 列出当前所有的session
  • screen -r yourname -> 回到yourname这个session
  • screen -d yourname -> 远程detach某个session
  • screen -d -r yourname -> 结束当前session并回到yourname这个session

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始

<think>好的,用户现在问的是如何使用screen保持后台运行。之前他们遇到了安装Java17的问题,现在可能是在搭建Minecraft服务器时需要保持服务端在后台运行。我得先回顾一下之前的对话,看看是否有相关的上下文需要参考。 首先,用户之前的安装问题涉及Ubuntu容器,所以可能他们现在是在同一环境中使用screenscreen是一个终端复用工具,可以让用户在断开SSH连接后保持进程运行,这对运行服务器非常重要。 接下来,我需要确定用户的需求。他们可能想确保即使关闭终端,Minecraft服务器也不会停止。所以需要详细说明screen的基本用法,比如创建会话、断开、重新连接等步骤。同时,用户可能对screen的高级功能不太熟悉,需要给出常见操作,比如列出会话、结束会话等。 还要考虑用户可能的错误操作,比如不小心关闭了终端而没有正确detach会话,导致进程终止。这时候需要提醒用户正确使用detach命令,或者设置自动detach。此外,用户可能需要后台运行多个任务,所以解释多窗口管理也是有必要的。 另外,用户可能对screen的安装不熟悉,特别是如果他们使用的是最小化安装的Ubuntu容器,可能需要先安装screen。所以在步骤中应该包含安装命令,比如sudo apt install screen。 最后,验证部分需要让用户确认screen是否正常工作,比如创建会话后运行一个命令,detach后再重新连接,确保进程还在运行。常见问题处理部分应该包括无法恢复会话或会话意外退出的解决方法,比如使用screen -ls检查,或者强制恢复。 总结下来,回答需要结构清晰,分步骤说明,涵盖安装、基本使用、高级操作、验证和常见问题,确保用户能够顺利使用screen保持后台进程运行,特别是针对他们的Minecraft服务器场景。</think>--- ### **Screen 基础使用指南** Screen 是 Linux 下的终端复用工具,可创建持久化会话,**即使断开 SSH 连接也能保持程序后台运行**。以下是完整操作流程: --- #### **1. 安装 Screen** 若系统未预装,先执行: ```bash sudo apt update && sudo apt install screen -y ``` --- #### **2. 核心操作命令** | **操作** | **命令** | **说明** | |-------------------------|-----------------------------------|-------------------------------------------------------------------------| | 创建新会话 | `screen -S <会话名称>` | 例:`screen -S minecraft` 创建名为 "minecraft" 的会话 | | 暂时退出(保持后台) | `Ctrl + A → 按 D` | 先按 `Ctrl+A`,松开后按 `D`,**注意大小写敏感** | | 列出所有会话 | `screen -ls` | 显示格式:`12345.mysession` (Attached/Detached) | | 恢复指定会话 | `screen -r <会话ID或名称>` | 例:`screen -r minecraft` 或 `screen -r 12345` | | 强制恢复崩溃的会话 | `screen -rd <会话ID>` | 当会话状态显示为 `(Dead)` 时使用 | | 彻底终止会话 | 在会话内输入 `exit` | 或使用 `kill -9 <会话PID>` | --- #### **3. 实战场景演示** **▸ 启动 Minecraft 服务器并后台运行** ```bash # 创建会话 screen -S mc_server # 在 screen 会话中启动服务端 java -Xmx4G -jar minecraft_server.jar nogui # 按 Ctrl+A → D 退出到主机终端,此时服务器保持运行 ``` **▸ 断开 SSH 后重新连接** ```bash # 1. 登录服务器后查看会话列表 screen -ls # 输出示例: 23456.mc_server (Detached) # 2. 重新附加到会话 screen -r mc_server ``` --- #### **4. 高级技巧** - **多窗口管理** - `Ctrl+A → C`:在当前会话中新建窗口 - `Ctrl+A → N`:切换到下一个窗口 - `Ctrl+A → P`:切换到上一个窗口 - **日志记录** 启动时添加 `-L` 参数自动记录日志: ```bash screen -L -S session_with_log ``` 日志默认保存为 `screenlog.0` - **自动锁定会话** 在 `~/.screenrc` 配置文件中添加: ```bash defescape ^Aa # 将默认 Ctrl+A 改为 Ctrl+A+a 触发 password lock_password # 设置会话密码 ``` --- #### **5. 验证后台运行** 断开 SSH 后,通过以下命令确认进程存活: ```bash # 查看 Java 进程 ps aux | grep java # 应显示类似:/usr/bin/java -Xmx4G -jar minecraft_server.jar nogui ``` --- #### **6. 常见问题处理** - **无法恢复会话** 检查是否已有其他用户连接: ```bash screen -r -d <会话ID> # 强制分离其他连接并恢复 ``` - **会话意外退出** 使用日志追溯原因: ```bash tail -n 100 screenlog.0 # 查看最后 100 行日志 ``` --- ### **替代方案对比** | 工具 | 优势 | 局限性 | |------------|-------------------------------|----------------------------| | **Screen** | 无需额外配置,轻量级 | 无分屏功能 | | **Tmux** | 支持分屏、更丰富的快捷键 | 学习曲线稍高 | | **Nohup** | 简单命令:`nohup command &` | 只能保持单个命令后台运行 | 建议优先掌握 Screen 的基础用法,能满足多数后台运行需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值