标签为 screen 的文章

使用screen命令进行多人协同操作

Linux在需要将某个命令放到后台操作的时候,有好几种方式,使用screen就是其中一种。
今天我要给大家展示的是如何通过screen进行多人协同操作,以及新人培训。
具体应用场景如下:
1. 公司来了一位新人Dong,上面安排了名叫Zaur的老员工来进行入职培训;
2. 培训的内容涉及到一些线上环境的介绍,其中有Puppet,Hadoop等。

Zaur作为一个前辈,想到了一个非常好的办法,那就是带着Dong一起到命令行里面去操作,具体实现的方法,就是将一个screen终端切割成多个窗口,按照培训章节命名,Dong登陆到screen终端实时体验Zaur的操作,并在Zaur的要求下进行重复操作以加深印象。

首先,Zaur首先登陆到一台普通的服务器,创建好对应的终端:
$ cp /etc/screenrc ~/.screenrc

启用多窗口功能,取消以下选项前的注释
$ vim ~/.screenrc

caption always "%{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw %=%{mk}@%H %{yk}%D %{ck}%M%{wk} %{ck}%d %{gk}%c"

$ screen -dmS training
$ screen -r training

然后创建好培训所需的章节(多窗口,相关按键)
Ctrl + a,进入编辑状态

进入编辑状态后相关操作如下:
Shift + a, 重命名当前窗口
c, 创建新窗口
1-9,进入指定编号的窗口
\, 询问是否关闭整个终端
d, 挂起整个终端
exit, 退出当前窗口

按照培训计划创建的窗口如下:
screen-windows

然后,Dong所需要做的事情,就是使用相同的账号登陆到相同的机器上,连接上Zaur创建的终端,然后切换到对应的窗口,这样Zaur做的所有操作,都会实时的展现出来,还可以进行操作。

$ screen -x training

No Comments

Linux运行与控制后台进程的方法:nohup, setsid, &, disown, screen

我们经常会碰到这样的问题,用ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络等的不稳定导致任务中途失败。
这是由于在用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。
解决办法有两种:让进程忽略HUP信号,或让进程运行在新的会话里从而成为不属于此终端的子进程。

下面是对Linux下运行与控制后台进程的各种方法的介绍:
1.nohup
顾名思义,nohup的用途就是让提交的命令忽略所有的hangup信号。
使用方法:nohup COMMAND [ARG]...

2.setsid
在一个新的会话中运行命令,从而可以避开当前终端发出的HUP信号。
使用方法:setsid COMMAND [ARG]...

3.&
可以结合()产生一个新的子shell并在这个子shell中将任务放置到后台运行,从而不受当前shell终端的HUP信号影响。
使用方法:(COMMAND [ARG]... &)

而我通常的使用方式为:
nohup ./filename.sh > filename.log 2>&1 &
nohup ./filename.sh &> filename.log &
三点理由:
1)nohup保障进程不会被hangup信号异常中断;
2)将任务放置到后台运行,不占用当前的终端;
3)将错误输出也打印到log中,默认>只有标准输出,错误输出没有。

阅读全文 »

, , ,

3 Comments