cron是Linux系统中的定时任务程序,大多数版本都自带安装。在日常的开发、运维等方面都会使用到,它可以帮助进行周期性的执行我们预设值的脚本或者命令。
cron包含的模块
cron主要包含crond后台守护程序和crontab两个模块,日常我们就是通过crontab这个命令工具进行定时任务配置文件进行编辑,crond后台守护进程是实现定时任务的功能:

cron的大致处理流程
Linux系统启动时会启动运行crond后台守护进程,然后每分钟扫描cron相关的配置文件(主要是/etc/crontab + /etc/cron.d/* + /var/spool/cron/*),若从这些配置文件中匹配到时间条件的任务就会创建子进程执行对应的时间点任务,执行的记录会保存在/var/log/cron文件中。
但需要注意:/etc/cron.daily、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly这几个目录下的文件(如果有)不被crond直接扫描而是通过配置文件里的run-parts到点才执行,比如rockylinux系统通过/etc/cron.d目录下的0hourly配置执行。

cron的任务调度方式
根据用途、权限、格式、作用范围,cron主要有系统级和用户级这两种任务调度方式。

两种任务调度方式主要区别:
系统级:只能是root用户编辑配置,系统全局有效,配置文件固定是/etc/crontab,可以指定任意用户执行任务,主要用途是系统维护、全局服务、日志清理。
用户级:所有用户都能编辑配置,当前用户有效,配置文件存储在/var/spool/cron/用户名,普通用户只能编辑自己的任务,主要用途是用户脚本或者程序定时执行。
cron配置案例
系统级: 直接编辑/etc/crontab文件,配置一个每分钟执行一次test.sh脚本的任务(必须指定用户,否则会报错)。
分 小时 日 月周执行用户命令
* * * * * root /home/test.sh
用户级:使用crontab -e命令,配置一个每分钟执行一次test.sh脚本的任务。
分 小时 日 月周命令
* * * * * /home/test.sh
时间段的语法字段说明
无论是系统级还是用户级定时任务,前面的时间段都一样是五个字段,这五个字段依次是:
分 小时 日 月 周
(0-59) (0-23) (1-31) (1-12) (0-7, 0/7=周日)
特殊符号:
*:任意值(每分/ 每时/ 每日...)
,:枚举(如 1,3,5)
-:范围(如 1-5 周一至周五)
/:步长(如 */10 每10 分钟)
常用示例:
* * * * *:每分钟
0 * * * *:每小时整点
0 0 * * *:每天零点
0 0 * * 0:每周日
0 0 1 * *:每月1 号
其他核心点
任务计划里的脚本命令必须用绝对路径。
所有定时任务的日志都在/var/log/cron文件。
/etc/cron.allow:仅列表内用户可使用。
/etc/cron.deny:列表内用户禁止使用。
最后重复一个坑点:系统级定时任务通过编辑/etc/crontab文件,比用户级定时任务通过crontab -e 配置的任务格式中,多一个【用户】字段。