crontab命令

 

. Crontab 介绍
 
    如果发现您的系统里没有这个命令 ,请安装下面两个软件包.
      vixie-cron
      crontabs
 
       crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。 -u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。 
[root@localhost test]# ps -ef |grep cron
root       3751     1 0 07:34 ?        00:00:00 crond
root      22726 12292 0 14:25 pts/2    00:00:00 grep cron
 
crond将定时执行你的命令。
 
1.1 /etc/crontab 文件
    在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。
   
如:
[root@dave ~]# 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
 
1.2 /etc/cron.deny 和 /etc/cron.allow 文件
 
/etc/cron.deny 表示不能使用crontab 命令的用户
/etc/cron.allow 表示能使用crontab的用户。
 
如果两个文件同时存在,那么/etc/cron.allow 优先。
如果两个文件都不存在,那么只有超级用户可以安排作业。
 
 
每个用户都会生成一个自己的crontab 文件。这些文件在/var/spool/cron目录下:
 
如:
[root@dave ~]# cd /var/spool/cron
[root@dave cron]# ls
oracle root
 
我们直接查看这个文件,里面的内容和对应用户显示的crontab -l 一致。
[root@dave cron]# cat oracle
00 6 * * * /u02/scripts/del_st_archive.sh >/u02/scripts/del_st_arch.log 2>&1
[root@dave cron]# cat root
0 12 * * * /root/bin/sync-clock.sh
[root@dave cron]#
 
 
二. Crontab 使用说明
 
2.1 Crontab语法
使用方式 :
usage: crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)
        -s      (selinux context)
 
 2.2 Crontab 格式说明
    [root@localhost test]# crontab –e //将会用VI打开一个编辑文档。
   
   添加的命令必须以如下格式:
   *  *  *  *  *  command 
  分  时  日  月  周      命令
   
    前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。
 
前5个字段分别表示:
    分钟:0-59
    小时:1-23
    日期:1-31
    月份:1-12
    星期:0-6(0表示周日)
 
还可以用一些特殊符号:
    *: 表示任何时刻
    ,: 表示分割
  -:表示一个段,如第二端里: 1-5,就表示1到5点
    /n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.
 
 
示例:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
 
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
 
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。 
 
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
 
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每隔5分钟重启apache
 
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
 
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
 
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
 
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
 
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache
 
2.3 & 后台执行命令
 
    当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。
 
    如:
    30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &
 
    在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。
    不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:
    如:
       command >out.file 2>&1 &
 
    在这个例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。
 
2.4 2>&1 含义
 
先看一个例子:
0 2 * * * /u01/test.sh >/dev/null 2>&1 &
 
这句话的意思就是在后台执行这条命令,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null 文件,也就是清空。
 
在这里有有几个数字的意思:
    0表示键盘输入
    1表示标准输出
    2表示错误输出.
 
 
我们也可以这样写:
0 2 * * * /u01/test.sh >/u01/out.file &  --这里没写,默认是1
0 2 * * * /u01/test.sh 1>/u01/out.file &
0 2 * * * /u01/test.sh 2>/u01/out.file &
0 2 * * * /u01/test.sh 2>/u01/out.file 2>&1 &
 
将tesh.sh 命令输出重定向到out.file, 即输出内容不打印到屏幕上,而是输出到out.file文件中。
 
2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件out.file。
&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。
 
2.5 2>&1写在后面的原因
    格式:command > file 2>&1    == command 1> file 2>&1
 
    首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。
 
如果改成: command 2>&1 >file
    2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端(时间A)。>file 后输出才被重定向到file(时间 B),但标准错误仍然保持在终端。
(可以理解为A B是两个不同的时间段,那终端上的内容是不一样的。)
 

 

本文出自 “风飘天下” 博客,请务必保留此出处http://su007.blog.51cto.com/4371447/1009504

你可能感兴趣的:(crontab)