Crontab 计划任务

有一部分工作,需要某个时间开始,每天执行,每间断一段时间执行.
这个时候就需要了crontab.
crontab 管理着linux上一些定期的任务.log rotate,logwatch 等等
废话不多说来看crontab,
环境:Centos 6.6 

 

[root@Centos etc]# crontab -h

crontab: invalid option -- 'h'

crontab: usage error: unrecognized option

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)

  -e 是编辑crontab
  -l 是列出来
  -r 是删除
  -i 删除前提示一下
  -s selinux的东东..

1. 先来讲讲格式: 

[root@HYG etc]# cat /etc/crontab 

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/



# For details see man 4 crontabs



# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed



00 01 * * * root  /usr/sbin/ntpdate cn.pool.ntp.org >/dev/null 2>&1

  ☆ 分 时 日 月 周 命令

  这个配置文件解释的也比较清楚了

    ★ ntp的这条crontab是我自己加的,/etc/crontab需要自己加上用户(user-name),crontab -e 命令的cron不需要加用户.写在/etc/crontab中的cron使用命令crontab -l 是看不到的.
    ★ 最小的时间间隔是分,所以只能控制到分钟了如果需求到秒的话可以脚本自行控制 sleep(10)
    ★ 权值,什么是权值 十进制 123  一百二十三 为什么是一百二十三 因为百位上是1 十位是2 个位是3, crontab 一样.分位代表的分钟,时代表着小时,依次类推(很多人这里很糊涂)
    ★ 特殊符:
      * 代表任意,很多人不理解,什么叫任意.. 如果*在分钟位上,那么就是任意分钟.分钟有多少(0,1,2,3,……,59),任意就是每一分钟都可以触发.*就等价于 0-59
      - 范围取值, (1-3) 就是1,2,3
      , 间隔符,将不同的值区分开,没有其他的意义.
      / 步长,频率,间隔多久, 1-9/2 就是每间隔2, 等价于1,3,5,7,9 
    ★ Centos 就这么几个特殊符号,没有#之类的其他符号(其他的定时可能会更多).
    ★ 周和日,月是或的关系,不是与.00 01 01 * 6 代表每月01号或者周六 01时执行.并不是每月01号并且是周六 01时执行,如果需要判断周几,可用脚本自行判断

2. 时间样例: 

  ☆  看看上边那个ntp的例子:每天,每月,1点 00分执行
  ☆ 反过来说一个, 每天的 3点,15点分别执行一次脚本:
      * 3,15 * * *      看到很多人会是这种写法,这种写法是错的.因为隐藏掉了分钟的说法所以很多人都会理解为分钟是* 这样写的话是3点,15点的任意分钟执行脚本,3点就要执行60次脚本.
      00 3,15 * * *   正确的写法,3,15点整执行
  ☆  10 3,15 * * *   这样也算是对的,看你的需求了.3点10分的是执行.最好让所有的脚本都岔开执行.
  ☆  00 3-5  * * *   范围都好理解 3点到5点 00分的时候执行 3:00 4:00 5:00 就会执行
  ☆  00 5 */2 * *    5点整执行,现在不是每天了,是每隔一天,执行一天休息一天 这个/不太好理解.
  ☆  1点到8点每小时执行,9-24点每2小时执行,05分的时候执行脚本
      05 1-8,9-24/2 * * *

3. 命令添加crontab: 

  crontab -e 会进入一个vi的编辑界面:

00 01 * * *   /usr/sbin/ntpdate cn.pool.ntp.org >/dev/null 2>&1  
00 01 * * *  /bin/bash /usr/locl/bin/test.sh >/dev/null 2>&1

    前一段是时间   命令  参数   
    这里想说的是如果执行脚本就加上/bin/bash,并且脚本路径用绝对路径.保证有权限,

4. 来看看crontab的配置文件: 

[root@Centos tmp]ls /etc/ | grep cron

cron.d/

cron.daily/

cron.deny

cron.hourly/

cron.monthly/

crontab

cron.weekly/

  crontab: 上边已经看过了.简单解释一下SHELL就是shell环境,PATH就是PATH变量,MAILTO邮件发给谁,HOME默认此 shell 的家目录所在
  cron.allow: 将可以使用 crontab 的账号写入其中,若不在这个档案内的使用者则不可使用 crontab
  cron.deny:  将不可以使用 crontab 的账号写入其中,若未记录到这个档案当中的使用者,就可以使用crontab。
    cron.allow比cron.deny优先级高,一般我们都保留一个cron.deny 一个账号一行.
  
cron.weekly/ cron.monthly/ cron.daily/ cron.hourly/ 这几个目录里边放的是脚本,每天每月每天每小时,都会执行相应里边的脚本.所以每天执行一次的脚本也可以直接放到cron.daily里边.你也可以自己创建目录cron.min
    */2 * * * * root run-parts /etc/cron.min   使用run-parts
  cron.d/ 这个是从crontab分裂出来,如果我们自己有编辑/etc/crontab配置文件的需求可以自己写在cron.d/下边,里边有几个样例自己可以看看.

5.使用命令crontab -e 编辑的cron存放在哪里(我之前编辑了几个crontab,如果你没有的话可以自己编辑几个crontab) 

 [root@Centos tmp]# ls /var/spool/cron/

 root

  以用户名为名命名的文件.

[root@HYG cron]# cat root 

40-45,45-50/2 * * * * echo "abc">>/tmp/abc.txt

  查看内容正是我们自己写的cron,我们写的cron 就保存在/var/spool/cron/ 并存在已用户名为名的文件.

[root@HYG cron]# echo " * * * * * echo hahaa >>/tmp/haha.txt" >>root
[root@HYG cron]# cat root
40-45,45-50/2 * * * * echo "abc">>/tmp/abc.txt
* * * * * echo hahaa >>/tmp/haha.txt
[root@HYG cron]# crontab  -l
40-45,45-50/2 * * * * echo "abc">>/tmp/abc.txt
* * * * * echo hahaa >>/tmp/haha.txt
ls /tmp/
haha.txt

  我们手动echo一条道root文件中. crontab -l 就可以直接查看到,并且不需要重启crontab

6. 重启crontab 

service crond stop

service crond start

更多的详情可以查看鸟哥的私房菜里边写的比较全,也可以 man 5 crontab

你可能感兴趣的:(crontab)