阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

教Linux运维人员怎样使用screen

358次阅读
没有评论

共计 5751 个字符,预计需要花费 15 分钟才能阅读完成。

今天小编为大家分享的文章是关于 Linux 运维 利器 -screen 的使用介绍,相信很多 Linux 运维人员对此都有所了解,下面跟小编一起来看一看文章内容吧。

Linux 是一个多用户多进程的操作系统,Linux 的远程操作我们常常使用是的 ssh 进行远程的。我们可以登录打开不通的终端,但是每一个终端都是一个环节变量。你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

一、分析,意外关闭终端程序挂掉的原因

Linux/Unix 中,几个相关概念:

进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组 ID,即进程组长进程的 ID。

会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期 ID 为首进程的 ID。

会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。

根据 POSIX.1 定义:挂断信号 (SIGHUP) 默认的动作是终止程序。当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。如果会话期首进程终止,则该信号发送到该会话期前台进程组。一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于 STOP 状态,发送 SIGHUP 和 SIGCONT 信号到该进程组中所有进程。

因此当网络断开或终端窗口关闭后,控制进程收到 SIGHUP 信号退出,会导致该会话期内其他进程退出。

会话实例

打开两个 SSH 终端窗口,在其中一个运行 top 命令。

[root@tivf09 root]# top

在另一个终端窗口,找到 top 的进程 ID 为 5180,其父进程 ID 为 5128,即登录 shell。

[root@tivf09 root]# ps -ef|grep top

root 5180 5128 0 01:03 pts/0 00:00:02 top

root 5857 3672 0 01:12 pts/2 00:00:00

grep top

使用 pstree 命令可以更清楚地看到这个关系:

[root@tivf09 root]# pstree -H 5180|grep top

|-sshd-+-sshd---bash---top

使用 ps-xj 命令可以看到,登录 shell(PID 5128)和 top 在同一个会话期,shell 为会话期首进程,所在进程组 PGID 为 5128,top 所在进程组 PGID 为 5180,为前台进程组。

[root@tivf09 root]# ps -xj|grep 5128

5126 5128 5128 5128 pts/0 5180 S

0 0:00 -bash

5128 5180 5180 5128 pts/0 5180 S

0 0:50 top

3672 18095 18094 3672 pts/2 18094 S

0 0:00 grep 5128

关闭第一个 SSH 窗口,在另一个窗口中可以看到 top 也被杀掉了。

[root@tivf09 root]# ps -ef|grep 5128

root 18699 3672 0 04:35 pts/2

00:00:00 grep 5128

二、解决方案:使用工具

方案一: 使用 nohup 命令

如果我们可以忽略 SIGHUP 信号,关掉窗口应该就不会影响程序的运行了。nohup 命令可以达到这个目的,如果程序的标准输出 / 标准错误是终端,nohup 默认将其重定向到 nohup.out 文件。值得注意的是 nohup 命令只是使得程序忽略 SIGHUP 信号,还需要使用标记 & 把它放在后台运行。

nohup <command> [argument…] &

虽然 nohup 很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。

方案二: 使用实用程序 screen

我们可以使用一个更为强大的实用程序 screen,可以从 GNU screen 的官方网站下载安装,来解决这个问题。

[root@linuxprobe ~]# rpm -qa|grep screen

xscreensaver-4.18-5.rhel4.11screen-4.0.2-5

screen 工具使用方式

简单来说,Screen 是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen 中有会话的概念,用户可以在一个 screen 会话中创建多个 screen 窗口,在每一个 screen 窗口中就像操作一个真实的 telnet/SSH 连接窗口那样。在 screen 中创建一个新的窗口有这样几种方式:

1. 直接在命令行键入 screen 命令

[root@tivf06 ~]# screen

Screen 将创建一个执行 shell 的全屏窗口。你可以执行任意 shell 程序,就像在 ssh 窗口中那样。在该窗口中键入 exit 退出该窗口,如果这是该 screen 会话的唯一窗口,该 screen 会话退出,否则 screen 自动切换到前一个窗口。

2.Screen 命令后跟你要执行的程序。

[root@tivf06 ~]# screen vi test.c

Screen 创建一个执行 vi test.c 的单窗口会话,退出 vi 将退出该窗口 / 会话。

3. 以上两种方式都创建新的 screen 会话。

我们还可以在一个已有 screen 会话中创建新的窗口。在当前 screen 窗口中键入 C -a c,即 Ctrl 键 + a 键,之后再按下 c 键,screen 在该会话内生成一个新的窗口并切换到该窗口。

screen 还有更高级的功能。你可以不中断 screen 窗口中程序的运行而暂时断开 (detach)screen 会话,并在随后时间重新连接(attach) 该会话,重新控制各窗口中运行的程序。例如,我们打开一个 screen 窗口编辑 /tmp/abc 文件:

[root@tivf06 ~]# screen vi /tmp/abc

之后我们想暂时退出做点别的事情,比如出去散散步,那么在 screen 窗口键入 C -a d,Screen 会给出 detached 提示:

暂时中断会话

教 Linux 运维人员怎样使用 screen

半个小时之后回来了,找到该 screen 会话:

[root@tivf06 ~]# screen -ls

There is a screen on:

16582.pts-1.tivf06 (Detached)

1 Socket in /tmp/screens/S-root.

重新连接会话:

[root@tivf06 ~]# screen -r 16582

看看出现什么了,太棒了,一切都在。继续干吧。

你可能注意到给 screen 发送命令使用了特殊的键组合 C -a。这是因为我们在键盘上键入的信息是直接发送给当前 screen 窗口,必须用其他方式向 screen 窗口管理器发出命令,默认情况下,screen 接收以 C - a 开始的命令。这种命令形式在 screen 中叫做键绑定(key binding),C- a 叫做命令字符(command character)。

可以通过 ”C-a ?” 来查看所有的键绑定,常用的键绑定有:

C-a ? 显示所有键绑定信息

C-a w 显示所有窗口列表

C-a C-a 切换到之前显示的窗口

C-a c 创建一个新的运行 shell 的窗口并切换到该窗口

C-a n 切换到下一个窗口

C-a p 切换到前一个窗口(与 C -a n 相对)

C-a 0..9 切换到窗口 0..9

C-a a 发送 C- a 到当前窗口

C-a d 暂时断开 screen 会话

C-a k 杀掉当前窗口

C-a [进入拷贝 / 回滚模式

Screen 常用选项

使用键绑定 C -a ? 命令可以看到, 默认的命令字符 (Command key) 为 C -a,转义 C -a(literal ^a)的字符为 a:

教 Linux 运维人员怎样使用 screen

因为 screen 把 C - a 看作是 screen 命令的开始,所以如果你想要 screen 窗口接收到 C - a 字符,就要输入 C -a a。Screen 也允许你使用 - e 选项设置自己的命令字符和转义字符,其格式为:

-exy x 为命令字符,y 为转义命令字符的字符

下面命令启动的 screen 会话指定了命令字符为 C -t,转义 C - t 的字符为 t,通过 C -t ? 命令可以看到该变化。

[root@tivf18 root]# screen -e^tt

自定义命令字符和转义字符

教 Linux 运维人员怎样使用 screen

其他常用的命令选项有:

-c file

使用配置文件 file,而不使用

默认的 $HOME/.screenrc

-d|-D [pid.tty.host]

不开启新的 screen 会话,而是断开其他正在

运行的 screen 会话

-h num

指定历史回滚缓冲区大小为 num 行

-list|-ls

列出现有 screen 会话,格式为 pid.tty.host

-d -m

启动一个开始就处于断开模式的会话

-r sessionowner/ [pid.tty.host]

重新连接一个断开的会话。多用户模式下连接到

其他用户 screen 会话需要指定 sessionowner,

需要 setuid-root 权限

-S sessionname

创建 screen 会话时为会话指定一个名字

-v

显示 screen 版本信息

-wipe [match]

同 -list,但删掉那些无法连接的会话

下例显示当前有两个处于 detached 状态的 screen 会话,你可以使用 screen -r <screen_pid> 重新连接上:

[root@tivf18 root]# screen –ls

There are screens on:

8736.pts-1.tivf18 (Detached)

8462.pts-0.tivf18 (Detached)

2 Sockets in /root/.screen.

[root@tivf18 root]

# screen –r 8736

如果由于某种原因其中一个会话意外终止,这时 screen -list 会显示该会话为 dead 状态。使用 screen -wipe 命令清除该会话:

[root@tivf18 root]# kill -9 8462

[root@tivf18 root]

# screen -lsThere are screens on:8736.pts-1.tivf18 (Detached)8462.pts-0.tivf18 (Dead ???)Remove dead screens with ‘screen -wipe’.2 Sockets in /root/.screen.

[root@tivf18 root]

# screen -wipeThere are screens on:8736.pts-1.tivf18 (Detached)8462.pts-0.tivf18 (Removed)1 socket wiped out.1 Socket in /root/.screen.

[root@tivf18 root]

# screen -lsThere is a screen on:8736.pts-1.tivf18 (Detached)1 Socket in /root/.screen.

[root@tivf18 root]

#

-d–m 选项是一对很有意思的搭档。他们启动一个开始就处于断开模式的会话。你可以在随后需要的时候连接上该会话。有时候这是一个很有用的功能,比如我们可以使用它调试后台程序。该选项一个更常用的搭配是:-dmS sessionname

启动一个初始状态断开的 screen 会话:

[root@tivf06 tianq]# screen -dmS mygdb

gdb execlp_test

连接该会话:

[root@tivf06 tianq]# screen -r mygdb

管理你的远程会话

先来看看如何使用 screen 解决 SIGHUP 问题,比如现在我们要 ftp 传输一个大文件。如果按老的办法,SSH 登录到系统,直接 ftp 命令开始传输,之后。。如果网络速度还可以,恭喜你,不用等太长时间了; 如果网络不好,老老实实等着吧,只能传输完毕再断开 SSH 连接了。让我们使用 screen 来试试。

SSH 登录到系统,在命令行键入 screen。

[root@tivf18 root]# screen

在 screen shell 窗口中输入 ftp 命令,登录,开始传输。不愿意等了?OK,在窗口中键入 C -a d:

管理你的远程会话

教 Linux 运维人员怎样使用 screen

然后。。退出 SSH 登录? 随你怎样,只要别杀掉 screen 会话。

是不是很方便? 更进一步,其实我们可以利用 screen 这种功能来管理你的远程会话,保存你所有的工作内容。你是不是每次登录到系统都要开很多窗口,然后每天都要重复打开关闭这些窗口? 让 screen 来帮你“保存”吧,你只需要打开一个 ssh 窗口,创建需要的 screen 窗口,退出的时候 C -a d“保存”你的工作,下次登录后直接 screen -r <screen_pid> 就可以了。

最好能给每个窗口起一个名字,这样好记些。使用 C -a A 给窗口起名字。使用 C -a w 可以看到这些窗口名字,可能名字出现的位置不同。

使用 putty:

教 Linux 运维人员怎样使用 screen

使用 telnet:

教 Linux 运维人员怎样使用 screen

更多 Screen 功能

Screen 提供了丰富强大的定制功能。你可以在 Screen 的默认两级配置文件 /etc/screenrc 和 $HOME/.screenrc 中指定更多,例如设定 screen 选项,定制绑定键,设定 screen 会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定 screen 配置文件。

以多用户功能为例,screen 默认是以单用户模式运行的,你需要在配置文件中指定 multiuser on 来打开多用户模式,通过 acl*(acladd,acldel,aclchg…)命令,你可以灵活配置其他用户访问你的 screen 会话。更多配置文件内容请参考 screen 的 man 页。

以上就是小编今天为大家分享的教 Linux 运维人员怎样使用 screen 的文章,希望本篇文章能够对 Linux 运维工程师 又有所帮助,想要了解更多关于 Linux 相关知识记得关注 Linux 培训 官网。

来源:http://www.ibm.com/developerworks/cn/linux/l-cn-screen/

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-12-03发表,共计5751字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7986159
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示 首先来回顾一下 10...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...