screen与协同工作让ssh在路由断后程序始终运行
2014-04-05 11:19
218 查看
screen是系统管理员手中的一件利器,下面我把它介绍给你,相信你会和我一样,认可这个非常棒的软件
一,什么情况下会用到screen?
比如说,我们在运行一个非常费时间的程序,注意:可能我们是在通过ssh远程连接到托管在机房中的机器上,
如果这个期间,网络出现中断(这个可以说是很正常的情况,别不信,我讲一件我亲历的例子),
则我们正在运行的程序就会中止(为什么会这样?我稍后解答)
如何保证当网络连接断开后,程序仍然在继续运行?而且可以随时的取回我们的屏幕?
答案就是screen
说明:1,我们做技术工作,要把各种极限情况考虑在内:有一个例子:有一次我在做 reiserfsck
(我通过ssh远程连接到托管在机房中的机器上)
那个分区的容量是2T,在进行了一半多(5个多小时过去了)我们的网络管理员不小心碰到了
路由器的电源线,完了,所有的一切都要重新开始,当时我还不会使用screen,
否则可以避免这场灾难。
2,网络中断后,我们远程运行的程序会自动中止,这个是为什么?
很简单,实验一下,我们现在就ssh到一台机器上,
我们运行这个命令: ps auxfww
注意: f参数: forest 就是以树结构来显示进程
root 756 0.0 0.0 3508 336 ? S 2008 11:20 /usr/sbin/sshd
root 8933 0.0 0.1 6776 1820 ? S 23:52 0:00 \_ /usr/sbin/sshd
root 8935 0.0 0.1 5616 1512 pts/3 S 23:52 0:00 \_ -bash
root 8977 0.0 0.0 2900 952 pts/3 R 23:53 0:00 \_ ps auxfww
可以看到当前正在执行的 ps auxfww 这个命令的位置,它的父进程是 -bash,而 -bash则是建立在pts/3这个tty上面
当网络中断时,pts/3上面所建立的连接会终止,当8935这个进程停止时,我们在其下面运行的命令自然也会停止。
3,多问一个问题,会nohup不可以吗?
这个问题问得好,用nohup当然可以,但注意:nohup需要把进程扔到后台去运行,仍以上面的reiserfsck为例,
运行此命令时需要和程序进行交互,这种情况下用nohup就没办法输入了。
而且screen有更多更强大的功能,当然更值得学习
二, 安装screen
screen不是标配的命令,但是centos的yum源中包含,用
yum install screen即可实现安装。
它的官网:http://www.gnu.org/software/screen/
三,使用screen的例子:
1,运行screen
screen -S down_video
直接运行screen就可以启动一个session(会话),但是还是给它做一下命名比较好,
这样可以避免和其他的session混淆,更可以一目了然的知道这个session的功能
说明 : -S 给session命名
2,如何列出系统中已在运行的screen session?
screen -ls
或着 screen -list
例子:
[root@dev ~]# screen -ls
There is a screen on:
4083.down_video (Attached)
1 Socket in /var/run/screen/S-root.
说明(Attached和Detached是screen session的两种状态,分别表示:正在被连接 和 已经被断开)
3,取回我们的screen
进入screen之后,此时我们可以进行我们的工作,
比如我要用wget 下载一个大型的视频 或用php写入大量的数据等
注意此时我们不用再担心我们到此远程机器的连接断开,
可以在此时直接关闭窗口
然后我们重新ssh连接到此远程机器,
登录后用screen -ls进行检查
[root@dev ~]# screen -ls
There is a screen on:
4083.down_video (Detached)
1 Socket in /var/run/screen/S-root.
状态显示 down_video这个screen session已经被 断开(detach)
此时我们用screen -r可以取回进行,
说明: -r :取回一个已被断开的screen session
例: [root@dev ~]# screen -r down_video
可以看到我们的程序仍在运行,中间未曾停止,而且此时我们又可以控制它了。
4,如何中断一个 screen session?
看例子:
[root@dev ~]# screen -ls
There is a screen on:
4083.down_video (Attached)
1 Socket in /var/run/screen/S-root.
请注意: 当前看到的session : down_video 正在被连接使用中,
这时我想使用此session
[root@dev ~]# screen -r down_video
There is a screen on:
4083.down_video (Attached)
There is no screen to be resumed matching down_video.
此时用 -r 不能取到此 screen session
这时只能用 -d 参数来强制中断它
[root@dev ~]# screen -d down_video
[4083.down_video detached.]
[root@dev ~]# screen -r down_video
再用 -r 取回 screen就成功了
注意:原来的被我们中断的连接会显示 :
[root@dev ~]# screen -r down_video
[remote detached]
四:使用screen进行远程协作:
1,什么情况下会用到这个远程协作?
比如:你需要给在远方的同事在一台服务器上面演示一项功能的操作步骤,
又如:你和同事需要连接到同一台服务器上面协作完成一项工作,每个人执行其中的一部分
2,步骤:
需要有一个人先登录到服务器,比如你的伙伴先登录,
登录后执行:
[root@dev ~]# screen -S cooperate
下面我们以同一帐号登录到同一台机器上面:
先查看情况:
[root@dev ~]# screen -ls
There is a screen on:
4195.cooperate (Attached)
1 Socket in /var/run/screen/S-root.
我们可以看到cooperate这个session是正在被连接的,
下面我们连接进入此session,即: 我们和伙伴使用同一个帐号进入同一个screen session
[root@dev ~]# screen -x cooperate
说明: -x:Attach to a not detached screen session. (Multi display mode)
就是连接 到一个未被断开的screen session,
注意此时两边的显示内容是完全相同,
注意:此时我们和伙伴都可以输入命令了,大家在一个session开始协同工作,
比如:咱们在这边执行: ls
伙伴的屏幕上会有相同的显示信息
一,什么情况下会用到screen?
比如说,我们在运行一个非常费时间的程序,注意:可能我们是在通过ssh远程连接到托管在机房中的机器上,
如果这个期间,网络出现中断(这个可以说是很正常的情况,别不信,我讲一件我亲历的例子),
则我们正在运行的程序就会中止(为什么会这样?我稍后解答)
如何保证当网络连接断开后,程序仍然在继续运行?而且可以随时的取回我们的屏幕?
答案就是screen
说明:1,我们做技术工作,要把各种极限情况考虑在内:有一个例子:有一次我在做 reiserfsck
(我通过ssh远程连接到托管在机房中的机器上)
那个分区的容量是2T,在进行了一半多(5个多小时过去了)我们的网络管理员不小心碰到了
路由器的电源线,完了,所有的一切都要重新开始,当时我还不会使用screen,
否则可以避免这场灾难。
2,网络中断后,我们远程运行的程序会自动中止,这个是为什么?
很简单,实验一下,我们现在就ssh到一台机器上,
我们运行这个命令: ps auxfww
注意: f参数: forest 就是以树结构来显示进程
root 756 0.0 0.0 3508 336 ? S 2008 11:20 /usr/sbin/sshd
root 8933 0.0 0.1 6776 1820 ? S 23:52 0:00 \_ /usr/sbin/sshd
root 8935 0.0 0.1 5616 1512 pts/3 S 23:52 0:00 \_ -bash
root 8977 0.0 0.0 2900 952 pts/3 R 23:53 0:00 \_ ps auxfww
可以看到当前正在执行的 ps auxfww 这个命令的位置,它的父进程是 -bash,而 -bash则是建立在pts/3这个tty上面
当网络中断时,pts/3上面所建立的连接会终止,当8935这个进程停止时,我们在其下面运行的命令自然也会停止。
3,多问一个问题,会nohup不可以吗?
这个问题问得好,用nohup当然可以,但注意:nohup需要把进程扔到后台去运行,仍以上面的reiserfsck为例,
运行此命令时需要和程序进行交互,这种情况下用nohup就没办法输入了。
而且screen有更多更强大的功能,当然更值得学习
二, 安装screen
screen不是标配的命令,但是centos的yum源中包含,用
yum install screen即可实现安装。
它的官网:http://www.gnu.org/software/screen/
三,使用screen的例子:
1,运行screen
screen -S down_video
直接运行screen就可以启动一个session(会话),但是还是给它做一下命名比较好,
这样可以避免和其他的session混淆,更可以一目了然的知道这个session的功能
说明 : -S 给session命名
2,如何列出系统中已在运行的screen session?
screen -ls
或着 screen -list
例子:
[root@dev ~]# screen -ls
There is a screen on:
4083.down_video (Attached)
1 Socket in /var/run/screen/S-root.
说明(Attached和Detached是screen session的两种状态,分别表示:正在被连接 和 已经被断开)
3,取回我们的screen
进入screen之后,此时我们可以进行我们的工作,
比如我要用wget 下载一个大型的视频 或用php写入大量的数据等
注意此时我们不用再担心我们到此远程机器的连接断开,
可以在此时直接关闭窗口
然后我们重新ssh连接到此远程机器,
登录后用screen -ls进行检查
[root@dev ~]# screen -ls
There is a screen on:
4083.down_video (Detached)
1 Socket in /var/run/screen/S-root.
状态显示 down_video这个screen session已经被 断开(detach)
此时我们用screen -r可以取回进行,
说明: -r :取回一个已被断开的screen session
例: [root@dev ~]# screen -r down_video
可以看到我们的程序仍在运行,中间未曾停止,而且此时我们又可以控制它了。
4,如何中断一个 screen session?
看例子:
[root@dev ~]# screen -ls
There is a screen on:
4083.down_video (Attached)
1 Socket in /var/run/screen/S-root.
请注意: 当前看到的session : down_video 正在被连接使用中,
这时我想使用此session
[root@dev ~]# screen -r down_video
There is a screen on:
4083.down_video (Attached)
There is no screen to be resumed matching down_video.
此时用 -r 不能取到此 screen session
这时只能用 -d 参数来强制中断它
[root@dev ~]# screen -d down_video
[4083.down_video detached.]
[root@dev ~]# screen -r down_video
再用 -r 取回 screen就成功了
注意:原来的被我们中断的连接会显示 :
[root@dev ~]# screen -r down_video
[remote detached]
四:使用screen进行远程协作:
1,什么情况下会用到这个远程协作?
比如:你需要给在远方的同事在一台服务器上面演示一项功能的操作步骤,
又如:你和同事需要连接到同一台服务器上面协作完成一项工作,每个人执行其中的一部分
2,步骤:
需要有一个人先登录到服务器,比如你的伙伴先登录,
登录后执行:
[root@dev ~]# screen -S cooperate
下面我们以同一帐号登录到同一台机器上面:
先查看情况:
[root@dev ~]# screen -ls
There is a screen on:
4195.cooperate (Attached)
1 Socket in /var/run/screen/S-root.
我们可以看到cooperate这个session是正在被连接的,
下面我们连接进入此session,即: 我们和伙伴使用同一个帐号进入同一个screen session
[root@dev ~]# screen -x cooperate
说明: -x:Attach to a not detached screen session. (Multi display mode)
就是连接 到一个未被断开的screen session,
注意此时两边的显示内容是完全相同,
注意:此时我们和伙伴都可以输入命令了,大家在一个session开始协同工作,
比如:咱们在这边执行: ls
伙伴的屏幕上会有相同的显示信息
相关文章推荐
- screen命令让断开SSH/TELNET的你依然可以保持程序继续运行工作
- 让程序可以在断开ssh连接后接着运行 screen
- 实现关闭ssh继续运行程序--nohup和screen
- Linux使用screen实现关闭ssh连接的情况下,让程序继续在后台运行
- 实现关闭ssh继续运行程序--nohup和screen
- 让screen帮助你协同工作
- AU3--让指定程序始终运行
- [原创]Win7、Win8、Win10始终以管理员身份运行程序。
- 为什么ssh一关闭,程序就不再运行了?
- 使用screen让程序在Linux后台运行
- C++实现一个多线程同步方式的协同工作程序示例
- 使用 SSH 远程连接运行图形界面程序(ubuntu)
- 避免ssh断开导致运行命令的终止:screen
- Visual 2008开发程序始终以管理员身份运行程序
- Linux让程序后台运行命令之screen与nohup
- 在win7旗舰版64位系统中,qtp破解密钥时,程序运行马上提示已停止工作
- screen简介(Linux中让程序在后台继续运行)
- win10中怎么让qq始终以管理员身份运行程序?
- 我工作这几年(五)-- 在代码中加入一些关键统计信息来实时监控程序的运行状态
- Java程序编写及运行准备工作