计划任务之二(crontab命令)

     循环执行的例行性命令,则是由croncrond)系统服务来控制的。由于系统本身就有相当多的例行性工作,因此,这个系统服务是默认启动的。另外,由于用户自己也可以进行例行性工作任务分配,所以,Linux也提供用户控制例行性工作的命令(crontab)
   1.crontab的工作
     at命令类似,可以限制使用crontab的用户账号。使用的限制数据有:/etc/cron.allow/etc/cron.deny(和at命令的用法一样)。当用户使用crontab命令建立工作任务分配后,该项工作就会被记录到/var/spool/cron/中,而且是以账号来识别的。举例来说,guo使用crontab后,他的工作会记录到/var/spool/cron/guo里。但请注意,不要使用vi直接编辑该文件,因为可能使用由于语法输入错误,会导致无法执行cron
   注意:cron所执行的每一项工作都会记录到/var/log/cron这个登录文件中。

  
 2.crontab的语法
    [root@redflag ~] # crontab [-u user] [-l | -e | -r] 
   
参数说明: 
     -u
:只有root能下达的参数,即帮其他用户建立/删除crontab 
     -l
:查看crontab的内容 
     -e
:编辑crontab的内容 
     -r
:删除crontab的内容 
    
范例:

 范例一:用guo在每天的1200发信息给自己
    [guo@redflag ~] # crontab -e 
    #
此时会进入vi的编辑画面让您编辑。注意,每项工作都是一行
    0 12 * * * mail guo –s “at 12:00” < /home/guo/test.txt
 
   
分时日月周 |========指令列==================|
    整个过程如前所述,会进入vi的编辑画面,然后一个工作一行来编辑,编辑完毕后输入“:wq”存储后离开vi就可以了。每项工作的格式都是“5个时间参数  实际操作命令5个实际参数代表的含义见表所示:

              数字代表的意义        分钟         小时        日期         月份                          周
范围 0-59 0-23 1-31 1-12 0-7 (07为星期天)

 

   另外,还有一些辅助的字符,如下表

                      特殊字符                                                            代表意义
* 表示任何时间都接受。举例来说,范例中,日、月、周都是*,表示不论何月、何日星期几的1200都执行后续命令
, 表示分隔时段的意思。举例来说,如果要执行的工作在300600,就会是:0 3,6 * * * command
- 表示一段实际范围内,如8点到12点间,每小时的20分都进行一项工作:20 8-12 * * * command
/n n代表数字,即每隔n单位时间,例如每5分钟进行一次,则是:*/5 * * * * command


 

 我们这里作几个例子!

  例题一:假如你的朋友生日是 5 2 ,你想要在 5 1 23:59发一封信给他,这封信的内容已经写在 /home/guo/lover.txt 中了
    [guo@redflag ~] # crontab -e
    59 23 1 5 * mail kiki < /home/guo/lover.txt
 
例题二:假如你每隔五分钟要去执行一个名为 test.sh 的文件一次,则: 
    [guo@redflag ~] # crontab -e
 
    59 23 1 5 * mail kiki < /home/guo/lover.txt  <==
刚刚的那个指令还存在! 
    */5 * * * * /home/guo/test.sh  <==
新加入的一个内容!
 
查询用户当前的crontab内容,我们可以这样:
    [guo@redflag ~] # crontab –l
    59 23 1 5 * mail kiki < /home/guo/lover.txt
    */5 * * * * /home/guo/test.sh
    #
注意,若仅想删除一项工作,必须要用crontab –e去编辑。
    #
如果想删除全部的工作,才使用crontab –r
    [guo@redflag ~] # crontab –r
    [guo@redflag ~] # crontab –l
    No crontab for guo

   3.系统的设置:/etc/crontab
    
系统的例行性任务只要用vi编辑/etc/crontab,而命令crontab -e 这个crontab其实是/usr/bin/crontab这个执行文件,但/etc/crontab可是一个纯文字文件,你可以root的身份编辑一下这个文件。在Linuxcrontab会自动的帮我们每分钟重新读取一次/etc/crontab的例行工作事项,但是在你修改完/etc/crontab之后,可能并不会马上执行,这个时候请重新启动 crond 这个服务:/etc/rc.d/init.d/crond restart
  
来看看 /etc/crontab 这的文件的内容吧: 
   [root@redflag ~] # cat /etc/crontab
 
   SHELL=/bin/bash
 
   PATH=/sbin:/bin:/usr/sbin:/usr/bin
 
   MAILTO=root
 
   HOME=/
 
   # run-parts
 
   01  * *  *  *   root    run-parts /etc/cron.hourly   <==
每小时执行的工作 
   02  4 *  *  *   root    run-parts /etc/cron.daily    <==
每天执行的工作 
   22  4 *  *  0   root    run-parts /etc/cron.weekly   <==
每星期执行的工作 
   42  4 1  *  *   root    run-parts /etc/cron.monthly  <==
每个月执行的工作 
  
    执行者   命令串
  
这个文件与刚执行crontab –e的内容很相似,但有几个地方不太一样。
   a)MAILTO=root
:当 /etc/crontab 这个文件中的例行性命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给root。由于root并无法在客户端中收信,因此,我通常都将这个e-mail改成自己的账号,[email protected]
   b)01 * * * * root run-parts /etc/cron.hourly,
在批注符号#run-parts后的命令可以发现,五个数字后面接的是root。这一行代表的是执行者为root身份,你也可以将改写成其它的身份。而run-parts代表后面接的 /etc/cron.hourly 一个目录内的所有可执文件 
    注意:基本上 /etc/crontab 里头支持两种下达指令的方式,一种是直接以指令型态下达,一种则是以目录规划来下达
    a
)指令型态: 
         01 * * * * guo mail -s “testing” kiki < /home/guo/test.txt 
        
执行者是guo, 且在每个小时执行一次指令 mail.
     b)
目录规划: 
         */5 * * * * root run-parts /root/runcron
 
         
建立一个/root/runcron目录,将要每隔五分钟执行的可执行文件写到该目录下,就可让系统每五分钟执行一次该目录下的所有可执行文件。
       
此外,与crontab -e 规划当中最不相同的就是多了一个用户级别的概念,通常我们都是以root的角度来规划例行性命令,但是总有不需要 root的指令,就可以使用用户级别来来规范该程序的用户属于谁。
       
假设你现在要作一个目录,让系统可以每2分钟去执行这个目录下的所有可以执行的文件,你可以写以下一行在 /etc/crontab 中:
        */2 * * * * root run-parts /etc/cron.min
       
那如果我需要执行的是一个程序。例如在侦测网络流量时,我们希望每五分钟侦测分析一次,可以这样写:
         */5 * * * * root /bin/mrtg  /etc/mrtgmrtg.cfg
        
没有了run-parts就是代表一个文件的意思。 

  

你可能感兴趣的:(crontab,职场,休闲)