crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后, 默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。


wKioL1ct5SzhT1nlAABY0v262Gk278.png


cron任务分为两类:
    系统cron任务:主要用于实现系统自身的维护;
        手动编辑:/etc/crontab文件
    用户cron任务:
        命令:crontab命令
            
系统cron的配置格式:/etc/crontab
                SHELL=/bin/bash
                PATH=/sbin:/bin:/usr/sbin:/usr/bin
                MAILTO=root

                # 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
                
注意:
    (1) 每一行定义一个周期性任务,共7个字段;
            *  *  *  *  * : 定义周期性时间
            user-name : 运行任务的用户身份
            command to be executed:任务
    (2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
    (3) 执行结果邮件发送给MAILTO指定的用户
                    
    用户cron的配置格式:/var/spool/cron/USERNAME
                SHELL=/bin/bash
                PATH=/sbin:/bin:/usr/sbin:/usr/bin
                MAILTO=root

                # 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
                # |  |  |  |  |
                # *  *  *  *  *   command to be executed    
                
注意:
    (1) 每行定义一个cron任务,共6个字段;
    (2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
    (3) 邮件发送给当前用户;
            
时间表示法:
    (1) 特定值;
        给定时间点有效取值范围内的值;
            注意:day of week和day of month一般不同时使用;
    (2) *
        给定时间点上有效取值范围内的所有值;表“每..”
    (3) 离散取值:,
        在时间点上使用逗号分隔的多个值;
            #,#,#
    (4) 连续取值:-
            在时间点上使用-连接开头和结束
                 #-#
    (5) 在指定时间点上,定义步长:
             /#:#即步长;
                    
注意:
    (1) 指定的时间点不能被步长整除时,其意义将不复存在;

    (2) 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;

        定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次;       


            示例:
                (1) 3 * * * *:每小时执行一次;每小时的第3分钟;
                (2) 3 4 * * 5:每周执行一次;每周5的4点3分;
                (3) 5 6 7 * *:每月执行一次;每月的7号的6点5分;
                (4) 7 8 9 10 *:每年执行一次;每年的10月9号8点7分;
                (5) 9 8 * * 3,7:每周三和周日;
                (6) 0 8,20 * * 3,7:
                (7) 0 9-18 * * 1-5:
                (8) */5 * * * *:每5分钟执行一次某任务;
                (9) */7
                
crontab命令:
    crontab [-u user] [-l | -r | -e] [-i]
        -e:编辑任务;
        -l:列出所有任务;
        -r:移除所有任务;即删除/var/spool/cron/USERNAME文件;
        -i:在使用-r选项移除所有任务时提示用户确认;
        -u user:root用户可为指定用户管理cron任务;