随笔 - 56, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

《LInux与Unix Shell编程指南》笔记之后台执行命令

                                                                     后台执行命令
                                                      点击此处打开《Linux与Unix Shell编程指南》本章pdf文档
需要说明补充的地方:
   a、   在crontab的内容中使用绝对路径;
   b、   默认情况下使用"crontab -e"命令时使用 vi编辑器,但也可以手动设定。由于我在redhat enterprise 5系
            统下,所以编辑$HOME目录下的.bash_profile而非pdf文档上的.profile文件。查找该文件的命令为:
            find ~ -name ".bash_profile",编辑它的命令为:vi .bash_profile,然后添加:         
            EDITOR=vi; export EDITOR;
   c、   创建一个名为<user>cron的文件,其中<user>为用户名,如,rootcron,在里面添加crontab内容,然后保存;
   d、   提交,命令为:crontab rootcron;
   e、   如果要修改rootcron内容,可以采用两种方法:
            1、   用gedit打开rootcron并修改保存,然后用命令"crontab rootcron"重新提交,则rootcron内容更新;
            2、   直接用命令"crontab -e"然后修改保存然后用命令"crontab -l",可以看到内容已经更新;
            两种方法的区别:
            1方法修改rootcron源文件;而2方法没有修改rootcron源文件,可以用gedit打开rootcron查看,可以发现内
            容还是跟上一次用gedit来修改rootcron的内容,而不是用"crontab -e"来修改后的内容。
   f、    默认情况下,在crontab内容中运行命令的运行结果情况将被发送到/var/spool/mail/(当前用户名的文件)内
            容中,如crontab内容中使用find命令的时候没有找到的反馈信息都会发送到mail内容中,
            1 11 * * * echo "Hello!"
            “Hello“字符串将被发送到mail内容中,不过也可以重定向到其他文件,如:
            1 11 * * * echo "Hello!" > rc.txt
            其中rc.txt被创建到当前目录下。
           
        正文:
        crontab命令
        cron是系统主要的调度进程,可以在无需人公干预的情况下运行作业。有一个叫做crontab的命令允许用户提交、编
辑或删除相应的作业。每一个用户都可以有一个crontab文件来把保存调度信息。可以使用它运行任意一个shell脚本或命
令。系统管理员通过cron.deny和cron.allow这两个文件来禁止或允许用户拥有自己的crontab文件。

        crontab内容的格式(6部分组成)
        分<>时<>日<>月<>星期<>要运行的命令
        注意<>表示空格,各部分范围为:
        分        1~59
        时        1~23(0表示子夜)
        日        1~31
        月        1~12
        星期    0~6(0表示星期天)
        注意:可以用横杠-表示一个时间范围,如你希望星期一至星期五运行,则在星期域使用1-5表示;可以用逗号",",如你
希望星期一和星期四运行这个作业,使用1,4表示;可以使用*表示连续的时间段。如果你对某个表示时间的域没有限定,用
*来表示。
   
    上面是crontab内容的格式,下面的是crontab命令的格式:
    crontab [ -u user ] -e -l -r
    -u    用户名
    -e    编辑crontab文件
    -l    列出crontab文件中的内容
    -r     删除crontab文件。
    注意:如果使用自己的名字登录,就不用使用-u选项,因为在执行crontab命令时,该命令能够知道当前的用户。
   
    步骤:
    1、创建crontab文件
    方法1:新建文件名为rootcron(可自定)的文件,然后用gedit打开并编辑crontab内容并保存;
    方法2:用crontab -e命令。我的系统的redhat enterprise 5,默认打开为vi编辑器,可以通过手动设置为vi编
辑器:在$HOME目录的.bash_profile(其他系统可能为.profile)文件,加入“EDITOR=vi; export EDITOR“,然
后保存退出。
    2、提交crontab文件
    命令:crontab rootcron
    同时,在/var/spool/cron目录中保存该文件的副本,到那时这个副本的文件名为用户名。
    3、提交以后可以查看当前的crontab内容,命令:crontab -l。可以做个备份,命令:crontab -l > $HOME/
mycron。
    4、删除crontab文件内容,命令:crontab -r。然后保留在/var/spool/cron目录中的副本被删除。所以,不要
把源文件放在/var/spool/cron/目录下,以免执行删除命令的时候把源文件删除。可以在$HOME目录下放源文件,当执行
删除命令后如果要重新提交,可以在$HOME目录下执行:crontab rootcron就可以了。

    at命令
    at命令允许用户向cron守护进程提交作业,使其在稍后的时间运行。这里稍后的时间可能是指 10min以后,也可能是
指几天以后。如果你希望在一个月或更长的时间以后运行,最好还是使用 crontab文件。
    用at命令提交的作业的所有输出将以电子邮件的形式发送给用户,除非重定向。根用户可以通过/etc目录下的
at.allow和at.deny文件来控制哪些用户可以使用at命令,哪些不可以。

    at命令格式:
    at [ -f script ] [ -m -l -r ] [ time ] [ date ]
    -f script    所要提交的脚本或命令
    -l            列出当前所有等待运行的作业
    -r            清楚作业,要提供相应的作业标识(ID)
    -m            作业完成给用户发邮件
    time        时间,格式灵活。
    date        日期,格式灵活。
   
    步骤:
    使用at命令提交命令或脚本
    两种方法:
    a、使用命令提示符如:   
   [root@localhost test]# at 10:57
    at
> ls -> atlist
    at
> <EOT>
    job 
6 at 2011-02-19 10:57
    <EOF>表示<CTRL -D>
    b、使用命令行方式,可以通过提交脚本完成,如:
    [root@localhost test]# at 18:30 today -f ./at_test.sh
    job 
7 at 2011-02-19 18:30
    列出所提交的作业
    用命令:at -l,得到:
    [root@localhost test]# at -l
    
7       2011-02-19 18:30 a root
    其中,7为该作业的标识,后面是作业运行的日期/时间。最后一列a代表at。
       
        清除一个作业:
        两种方法:
    a、at -r [ job no ]
    例如:
    [root@localhost test]# at 18:35 today -f ./at_test.sh
    job 
8 at 2011-02-19 18:35
    [root@localhost test]# at 
-l
    
8       2011-02-19 18:35 a root
    [root@localhost test]# at 
-r job 8
    [root@localhost test]# at 
-l
    b、atrm [ job no ]
    例如:    
   [root@localhost test]# at 18:38 today -f ./at_test.sh
    job 
10 at 2011-02-19 18:38
    [root@localhost test]# at 
-l
    
10      2011-02-19 18:38 a root
    [root@localhost test]# atrm job 
10
    [root@localhost test]# at 
-l

    &命令
    当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端,可以使用&命令把作业放在后
台执行。
    格式为:
    命令 &
    不过作业在后台执行的结果也会输出到屏幕上,干扰你的工作,所以可以通过重定向解决,如:
    
   [root@localhost test]#find . -name "at_test" -print >find.dt 2>&1 &
    [
15303
    其中[1] 5303为进程号。
    注意:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。
    当上面的作业完成时,按回车键就会出现一个提示表示完成:
    [root@localhost test]# 
    [
1]+  Done                    find . -name "at_test" -print >find.dt 2>&1
    可以通过命令“ps x“或者“ps -ef“来查看进程。并用kill命令杀死进程,不过前提是知道该进程的进程号。如:
    kill 5303

    nohup命令
    作用:如果你正在运行一个进程,而且觉得在退出帐户之前不会结束,那么使用nohup命令使其在退出帐户后继续运行
。格式为:
    nohup command &
    如何验证呢?
    方法:先用nohup提交一个进程,然后退出帐户重新登录,然后在用ps命令查看进程,看是否还在。

posted on 2011-02-17 22:29 八路 阅读(506) 评论(0)  编辑 收藏 引用 所属分类: 嵌入式linux笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理