Linux cron定时介绍

定时任务的使用场景非常广泛,比如定时发送邮件,定时清理日志等等,在持续集成中,可以定时地触发测试任务,比如希望在每天晚上下班时间执行自动化用例 。本文通过介绍linux cron定时来了解cron定时相关概念 。
Linux Crontab 定时任务cron来源于希腊语chronos,意思是时间 。在类Unix的操作系统中,可以使用cron 服务器来实现定时执行任务 。crontab文件存放cron指令,执行周期命令的守护进程crond负责激活这些任务,定期检查是否有任务执行 。
crond 服务crond 服务是用来执行周期任务或等待处理某些事件的一个守护进程,crontab 命令需要 crond 服务支持 。centos7中一般是默认安装的,可以使用 rpm 命令查看是否安装:
$ rpm -qa | grep crontabcrontabs-1.11-6.20121102git.el7.noarch查看crond 服务状态:
# centos7systemctl status crond.service # centos6service crond status启动crond 服务:
# centos7systemctl startcrond.service# centos6service crond start停止crond 服务:
# centos7systemctl stopcrond.service# centos6service crond stop重启crond 服务:
# centos7systemctl restartcrond.service# centos6service crond restart重载crond 服务:
# centos7systemctl reloadcrond.service# centos6service crond reloadcrontab相关文件cron 服务主要包括以下文件目录:

  • /var/spool/cron:用户定义的crontab文件存放目录
  • /etc/cron.d:存放要执行的crontab文件或脚本
  • /etc/crontab:系统任务调度的配置文件
  • /etc/anacrontab:anacron配置文件
  • /etc/cron.deny:列出不允许使用crontab命令的用户
  • /etc/cron.daily:每天执行一次的脚本
  • /etc/cron.hourly:每小时执行一次的脚本
  • /etc/cron.monthly:每月执行一次的脚本
  • /etc/cron.weekly:每星期执行一次的脚本
/etc/crontab文件负责管理和维护任务:
$ cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=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-namecommand to be executed其中:
  • SHELL变量指定系统使用的shell版本
  • PATH指定系统执行命令的路径
  • MAILTO指定邮件发送的用户,如果为root,邮件会发送到/var/spool/mail/root文件中
cron表达式用户定义的crontab文件保存在 /var/spool/cron 目录中,每个crontab任务以创建者的名字命名 。crontab文件中每一行都代表一项任务,每条命令包括6个字段,前5个代表时间,第6个字段是要执行的命令 。
五颗星:* * * * *
  • 第1颗星:分钟 minute,取值 0~59;
  • 第2颗星:小时 hour,取值 0~23;
  • 第3颗星:天 day,取值 1~31;
  • 第4颗星:月 month,取值 1~12;
  • 第5颗星:星期 week,取值 0~7,0 和 7 都表示星期天 。
可以使用4种操作符:
  • * :当前代表的所有取值范围内的数字
  • /:需要间隔的数字
  • -:某个区间,比如1-3表示1, 2, 3
  • ,:分散的数字,可以不连续,比如1, 3, 5
下面举几个例子:
# 每5分钟构建一次H/5 * * * *# 每2小时构建一次H H/2 * * *# 每天8点到22点,每2小时构建一次H 8-22/2 * * *# 每天8点,22点各构建一次H 8,22 * * *crontab命令crontab 命令用来配置定时任务,语法如下:
crontab [options] filecrontab [options]常用options:
  • -u <user> :定义用户
  • -e:编辑 crontab表
  • -l: 列出用户crontab表
  • -r:删除用户crontab表
  • -i:删除提示
  • -n <hostname> 设置用户crontab主机名
  • -c:获取运行用户crontab的主机名
  • -s:selinux 上下文
  • -x <mask> :开启调试
crontab定时示例先写一个用于采集CPU性能信息的脚本(cpu_Perf.sh):
#!/bin/bashmpstat -P ALL 1 2 >> /var/cron/perf.log下面来添加一个定时任务:
执行 命令crontab -e ,输入下面的cron表达式,每分钟执行一次CPU性能采集脚本:
* * * * * /var/cron/cpu_Perf.sh保存 。命令保存到了 /var/spool/cron/ 目录下的root文件中(当前用户为root):
$ cat /var/spool/cron/root * * * * * /var/cron/cpu_Perf.sh$ crontab -l* * * * * /var/cron/cpu_Perf.sh保存成功后,每一分钟就会执行一次脚本 。


推荐阅读