Linux防止程序中断,使用Linux Screen 管理远程会话,防止连接断开导致的程序中断。...

Linux Screen

系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

Screen  是一个全屏窗口管理器,复用多个进程(通常是交互式shell)之间的物理终端。

命令语法:

screen [-AmRvx -ls -wipe][-d ][-h ][-r ][-s ][-S ]

命令选项:

-4            Resolve hostnames only to IPv4 addresses.#只对IPv4地址解析主机名。

-6            Resolve hostnames only to IPv6 addresses.

-a            Force all capabilities into each window\'s termcap. #每个窗口的termcap强制使用所有功能。

-A -[r|R]     Adapt all windows to the new display width & height. #所有窗口适应新的显示宽度和高度。

-c file       Read configuration file instead of '.screenrc'. #读取配置文件代替“.screenrc”。

-d (-r)       Detach the elsewhere running screen (and reattach here). #分离其它处运行的Screen(并在此处重新会话)

-dmS name     Start as daemon: Screen session in detached mode.#在分离模式下启动守护进程:Screen会话

-D (-r)       Detach and logout remote (and reattach here). #分离并退出远程(并在此处重新会话)。

-D -RR        Do whatever is needed to get a screen session.#做任何需要得到一个Screen会话。

-e xy         Change command characters.

-f            Flow control on, -fn = off, -fa = auto.#流控制开关

-h lines      Set the size of the scrollback history buffer.#设置回滚历史缓存的大小。

-i            Interrupt output sooner when flow control is on.#较早的中断输出当流控制开启。

-l            Login mode on (update /var/run/utmp), -ln = off.#登录模式控制

-ls [match]   or

-list         Do nothing, just list our SockDir [on possible matches].#什么都不做,仅列出所有的SockDir

-L            Turn on output logging.#打开输出日志。

-m            ignore $STY variable, do create a new screen session.#忽略$STY变量,创建一个新的Screen会话。

-O            Choose optimal output rather than exact vt100 emulation.#选择最优的输出而不是确切vt100仿真。

-p window     Preselect the named window if it exists.#预选命名的窗口(如果它存在)。

-q            Quiet startup. Exits with non-zero return code if unsuccessful.#安静启动

-Q            Commands will send the response to the stdout of the querying process.#命令将响应发送到stdout的查询过程。

-r [session]  Reattach to a detached screen process.#重新连接一个断开的Screen进程。

-R            Reattach if possible, otherwise start a new session.#重新连接Screen,如果成功,其他选项将被忽略,否则开始一个新的会话。

-s shell      Shell to execute rather than $SHELL.#Shell执行,而不是环境变量$SHELL指定的程序。

-S sockname   Name this session .sockname instead of ...

#当创建一个新的会话,可以使用此选项来指定会话一个有意义的名称。它可以代替默认的[ tty.host ]后缀。

-t title      Set title. (window\'s name).#设置标题。

-T term       Use term as $TERM for windows, rather than "screen".

-U            Tell screen to use UTF-8 encoding.#告知Screen使用UTF-8编码。

-v            Print "Screen version 4.01.00devel (GNU) 2-May-06". #打印版本。

-wipe [match] Do nothing, just clean up SockDir [on possible matches].

-x            Attach to a not detached screen. (Multi display mode).#附加到一个不独立的Screen。(多显示模式)。

-X            Execute  as a screen command in the specified session.

Screen默认绑定键:

ctrl+a ? #Displays commands and its defaults (VERY important)

ctrl+a : #Enter to the command prompt of screen

ctrl+a 0 #opens window 0

ctrl+a A #Rename the current window

ctrl+a a #Sends ctrl+a to the current window

ctrl+a c #Create a new window (with shell)

ctrl+a S #Split current region into two regions

ctrl+a tab #Switch the input focus to the next region

ctrl+a ctrl+a #Toggle between current and previous region

ctrl+a Esc #Enter Copy Mode (use enter to select a range of text)

ctrl+a ] #Paste text

ctrl+a Q #Close all regions but the current one

ctrl+a X #Close the current region

ctrl+a d #Detach from the current screen session, and leave it running. Use screen -r to resume

ctrl+a " #Window list

ctrl+a :quit #Closes all windows and closes screen session

ctrl+a :source ~/.screenrc #Reloads screenrc configuration file (can alternatively use /etc/screenrc)

安装Screen:

yum install screen

创建一个新的窗口

screen -S stty1  (stty1为自己起的会话名)

screen启动后,会创建第一个窗口,也就是窗口No. 0,并在其中打开一个系统默认的shell,一般都会是bash。所以你敲入命令screen之后,会立刻又返回到命令提示符,仿佛什么也没有发生似的,其实你已经进入Screen的世界了。当然,也可以在screen命令之后加入你喜欢的参数,使之直接打开你指定的程序,例如:

screen vi test.txt

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

会话分离与恢复

你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。

那么在screen窗口键入C-a d

会给出提示:[detached from 7745.stty1]

找到该screen会话

[root@localhost]# screen -ls

There is a screen on:

7745.stty1(Detached)

1 Socket in /var/run/screen/S-root.

[root@localhost]# screen -r stty1

清除dead 会话

如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话。

会话共享

还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:

[root@localhost]#screen -x

这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口中去,那还是可以分别进行不同的操作的。

你可能感兴趣的:(Linux防止程序中断)