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


一、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/
 
   
   

本文出自 “story的天空” 博客


你可能感兴趣的:(screen)