专注做网管的电脑公司
  • 微信公众号
  • 联系我们
  • 客服热线:13726442969
  • Linux 定时任务(crontab)

    2021-04-06 22:46:44 256

    介绍

    本篇主要介绍Linux定时任务命令crontab的用法,crontab是定时任务的命令,而crond则是定时任务的启动服务。crontab的定时任务分为系统任务和用户任务,其实二者没有太大的区别。

     

     

    安装

    在centos中crond默认是安装好的,如果没有安装的话执行以下操作

     

    复制代码
    安装crond
    yum -y install vixie-cron
    yum -y install crontabs
    
    加入开启启动服务
    chkconfig crond on
    复制代码

    启动 

    在Centos中crond服务默认是自动启动的,如果没有启动可以手动启动,具体方法如下。

    复制代码
    查看定时任务是否启动
    service crond status
    
    将定时任务加入系统自动启动服务
    chkconfig crond on

    启动定时任务服务
    service crond start
    复制代码

     

    系统任务调度

    系统定时任务一般用来执行一些系统方面的操作,比如日志清理;系统的定时任务可以通过编辑/etc/crontab来设定。
    爱土壤电脑
    • SHELL:系统要使用哪个shell

    • PATH:系统定时任务执行的命令的路径,不要把这个PATH和系统环境变量认为是一样,二者没有关系,在系统环境变量里面配置的路径在这里不能生效。

    • MAILTO:用来接收邮件的用户,默认是root,邮箱的内容会保存在"/var/spool/mail/root"文件中。

    • HOME:系统定时任务的家目录。

     注意:系统定时任务在命令前必须指定用户,一般系统定时任务会使用root用户来执行,系统定时任务还可以配置定时任务的路径,但是要使用“run-parts”,例如每个小时执行文件夹下面的定时任务,用户定时任务不能指定文件夹。
    00 * * * * root run-parts /etc/cron.hourly

     

    用户任务调度

    用户的定时任务可以通过执行crontab命令来创建,一个用户只会生成一个定时任务文件会以用户名命名,用户定义的定时任务都保存在“/var/spool/cron”目录下,用户任务调度和系统任务调度的时间段是一样的,唯一的区别就是用户任务调度不需要指定用户名,而且也不能使用run-parts参数指定目录。
     

    crontab命令选项

    crontab [-u user] file

    crontab [-u user] [ -e | -l | -r ]

    • -e:创建和编辑定时任务,默认是创建和编辑当前用户的定时任务,只有root可以创建也编辑其它用户的定时任务。

    • -l:列出当前用户的定时任务,如果使用了-u参数指定了用户那么就是列出指定用户的定时任务。

    • -r:删除当前用户的定时任务,如果使用了-u参数指定了用户那么就是删除指定用户的定时任务。

    • -i:在删除用户命令前加以提示,-i参数不能单独使用需要结合-r参数以前使用。

     

    两种调度方式的不同点:

    系统定时任务是整个系统级别的定时任务,只有root用户可以创建,通过在/etc/crontab文件或者是在/etc/cron.d/目录中创建定时任务。

    用户定时任务是每个用户都可以创建的定时任务,通过执行crontab -e进行创建,每个用户的定时任务保存在“/var/spool/cron”目录下每个用户自己的文件中。也可以通过“crontab -l”查看用户自己的定时任务

    两种调度方式的相同点:

    两种定时任务的创建都是永久的,服务器重启后也不会失效;每次创建任务不需要重启crond服务。

     

    crontab任务格式

    crontab分别有五个时间段,以空格隔开分别如下:
    minute hour day month week command 顺序:分 时 日 月 周

    其中:

    • minute: 表示分钟,可以是从0到59之间的任何整数。

    • hour:表示小时,可以是从0到23之间的任何整数。

    • day:表示日期,可以是从1到31之间的任何整数。

    • month:表示月份,可以是从1到12之间的任何整数。

    • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

    • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

    在以上各个字段中,还可以使用以下特殊字符:

    • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

    • 逗号(,):可以用逗号隔开的值指定一个列表范围,如:“1,2,5,7,8,9”,如果是month则表示这几个月执行该命令。

    • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

    • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“10-23/2”如果是指小时代表10点到23点每隔2个小时执行一次。例如*/1可以表示每隔一个小时执行一次。

    其它限制:

    /etc/cron.deny 该文件中所列用户不允许使用crontab命令/etc/cron.allow 该文件中所列用户允许使用crontab命令 
    
    /var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名

    注意:默认的用户的shell,path,mailto,home是没有定义的,可以单独定义用户的这几个变量否则可能会出现用户找不到一些用户软件的命令,具体的定义方法可以参考系统任务的定义,主要还是SHELL、PATH。默认的用户的这几个变量信息如下:

    X-Cron-Env:<SHELL=/bin/sh>
    X-Cron-Env: <HOME=/home/chen>
    X-Cron-Env: <PATH=/usr/bin:/bin>
    X-Cron-Env: <LOGNAME=chen>
    X-Cron-Env: <USER=chen>

     

    例1:每天的1点到6点和13点到18点,每隔5分钟执行命令

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin
    MAILTO=chen
    HOME=/data/backup*/5 01-06,13-18 * * * ./userbackup.sh test

    上面定义了每天的1点到6点和13点到18点,每隔5分钟执行命令。

    例2:每天9点到18点每隔2个小时执行一次

    0 09-18/2 * * * ./userbackup.sh test

    注意:时间范围01-06是指01:00-06:59,命令后面可以使用“;”连接多个命令

    总结

    定时任务很实用,而且实用方法也很多,有兴趣可以慢慢研究。