定时任务的使用场景非常广泛,比如定时发送邮件,定时清理日志等等,在持续集成中,可以定时地触发测试任务,比如希望在每天晚上下班时间执行自动化用例 。本文通过介绍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 reload
crontab相关文件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:每星期执行一次的脚本
$ 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文件中
五颗星:* * * * *
- 第1颗星:分钟 minute,取值 0~59;
- 第2颗星:小时 hour,取值 0~23;
- 第3颗星:天 day,取值 1~31;
- 第4颗星:月 month,取值 1~12;
- 第5颗星:星期 week,取值 0~7,0 和 7 都表示星期天 。
- * :当前代表的所有取值范围内的数字
- /:需要间隔的数字
- -:某个区间,比如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> :开启调试
#!/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
保存成功后,每一分钟就会执行一次脚本 。
推荐阅读
- Linux之killall命令
- 如何将不同linux服务器的目录内容进行双向同步
- PwnKit漏洞曝光:所有主流Linux发行版本均受影响
- Linux IO缓存落盘
- Linux 网络命令知多少
- FFmpeg之Linux下编译与调试
- Linux之date命令
- 微软发布全新Linux DirectX驱动程序,升级Win11/10 WSL子系统内核
- Linux中是谁占用了我的端口
- Linux下使用tail查找日志文件关键词高亮显示