您的位置:首页 > 运维架构 > Shell

保障shell任务不受意外中断影响的几种常见方法

2011-11-02 18:47 381 查看
我相信大家在平时登陆服务器时候都经常遇到这种情况:正在用vi 写脚本的时候,正在远程拷贝/同步数据的时候,正在执行脚本的时候,正在导入数据的时候 突然~~~断网了、电脑死机了、大楼停电了...等等意外情况

导致ssh登陆中断,你会郁闷、无奈、发飙?!之前进行的各种操作可能都要重来,(其实这些都是SIGHUP的罪过)不过在工作过程中我们经常用很多办法来预防以上这些情况对我们操作带来的影响。以下几种就是我比较常用的方法

一、nohup

一般的linux 系统都会默认安装,如果没有的话可以通过安装coreutils包来得到nohup命令

命令格式:nohup Command [ Arg ... ] [ & ]

相信大家应该经常用吧,会把命令输出放到nohup.out 这个文件里面,即使ssh窗口断掉了也不会受到影响,可以通过查看nohup.out 文件来查看执行状态。

缺点:无法用于文本编辑等需要人机交互情况

二、计划任务(cron)

系统默认安装,默认启动

这个我就不用再多说什么了,针对很多情况都可以用他,但是用起来比较nohup稍微麻烦一些,不过两者也可以结合来做,比如编辑计划任务的时候命令或者脚本前面加个 nohup也可以

缺点:仍然无法用于文本编辑等需要人机交互的情况

三、screen

这个几乎就是目前比较全面的解决方案了,主页http://www.gnu.org/s/screen/

关于screen的简短介绍(Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells.)

下面是下载地址:
http://mirrors.163.com/centos/6.0/os/x86_64/Packages/screen-4.0.3-15.el6.x86_64.rpm (红帽系列的64位服务器可以参考这个)
http://ftp.gnu.org/gnu/screen/ (源码包下载地址)

这个算是我用的最多的一种方法了,我在大多数情况下只需要 screen 后面跟命令就可以了,如果遇到各种断的情况时候 重新连接后 输入 screen -ls可以看到我之前的连接

如:

之前我在一个服务器打开了三个窗口,同时screen vim config.h ,执行脚本,查找文件

第一个窗口

[root@test ~/nrpe-2.12/include]

# screen vim config.h





然后强制关闭这个窗口

重新连接这台服务器

执行下面操作

[root@test ~]

# screen -ls

There are screens on:

2872.pts-3.test (Attached)

2523.aaa (Detached)

2858.pts-5.test (Attached)

3 Sockets in /var/run/screen/S-root.

上面可以看到我有三个连接,(aaa 是我用screen -dmS 来新建的一个session) 如果想恢复的话 使用 screen -r 2872 就可以了,

执行后回到了我刚才编辑的config.h





screen的功能很强大,如果大家想进一步了解他的话可以去这个地址看一下,http://www.ibm.com/developerworks/cn/linux/l-cn-screen/ ,田强老师写的很详细 我就不多说了。这个写的更深入一些:http://www.ibm.com/developerworks/cn/aix/library/au-gnu_screen/

还有一点要注意下,screen如果套的太多的话容易造成混乱,还是不要搞太多层的好,呵呵

希望大家以不会再受连接中途断开之苦,O(∩_∩)O~
本文出自 “story的天空” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: