linux中的计划任务crontab
crontab:可以从定时重复工作中解脱出来
工作中遇到的困难
- 每分钟需要执行一个程序检查系统运行状态
- 每天凌晨需要对过去一天的业务数据进行统计
- 每个星期需要把日志文件备份
- 每个月需要把数据库进行备份
crontab 简介
- 用于设置周期性被执行的任务工具。
- 被周期性执行的任务我们称为Cron job
- 周期性执行的任务列表称为Cron Table
crontab 实践内容简介
- 相关工具
- 安装并检查crontab服务
- crontab的基本组成
- crontab的配置文件格式
- crontab工具的使用
- crontab 的日志
- crontab 常见的错误
检查cron服务
- 检查crontab工具是否安装:crontab -l
- 检查crontab服务是否启动:service crond status
安装cron
- yum install -y vixie-cron
- yum install crontabs
案例
[root@xuexi-001 ~]# crontab -e*/1 * * * * date >> /tmp/log.txt# 每分钟都打印当前时间到log.txt 文件中[root@xuexi-001 ~]# tail -f /tmp/log.txt 2018年 10月 05日 星期五 00:00:01 CST2018年 10月 05日 星期五 00:01:01 CST2018年 10月 05日 星期五 00:02:01 CST# tail -f 显示文件的最后几行 ,tail -2 显示文件的最后两行
crontab 基本组成
- crond 服务 --系统服务
- 配置文件 --以文件方式设置定时任务
- 配置工具 -- 用于调整定时任务
crontab 配置文件格式
- * * * * * COMMAND
- 第一个 * :分钟 0-59
- 第二个 * :小时 0-23
- 第三个 * :日期 1-31
- 第四个 * :月份 1-12
- 第五个 * :星期 0-7(0或者7代表星期天)
案例
- 每晚的21:30重启apache
30 21 * * * service httpd restart
- 每月的1、10、22日的4:45重启apache
45 4 1,10,22 * * service httpd restart
- 每月的1到10日的4:45重启apache
45 4 1-10 * * service httpd restart
- 每隔两分钟重启apache
*/2 * * * * service httpd restart # 偶数分钟1-59/2 * * * * service httpd restart # 奇数分钟
- 晚上11点到早上7点之间,每隔一小时重启apache
0 23-7/1 * * * service httpd restart
- 每天18:00到23:00之间每隔30分钟重启apahce
0,30 18-23 * * * service httpd restart0-59/30 18-23 * * * service httpd restart
小结
- * 表示任何时候都匹配
- 可用“A,B,C” 表示A或者B或者C时执行命令
- 可用“A-B”表示A-B之间时执行命令
- 可用“*/A” 表示A分钟(小时等)执行一次命令
crontab工具的使用
crontab 选项:
- -u: define user
- -e: edit user's crontab
- -l: list user's crontab
- -r: delete user's crontab
案例
1、给root 用户添加计划任务:每隔两分钟(奇数分钟)打印 “JISHU**********”
[root@xuexi-001 ~]# crontab -e1-59/2 * * * * echo "JISHU***********************"
2、添加普通用户 crontester 并且添加计划任务:每隔两分钟(偶数分钟)打印“EVEN**************”
[root@xuexi-001 ~]# useradd crontester[root@xuexi-001 ~]# crontab -e -u crontester [root@xuexi-001 ~]# crontab -l -u crontester0-58/2 * * * * echo "EVEN ************"
查看日志
[root@xuexi-001 ~]# tail -f /var/log/cronOct 5 00:51:01 xuexi-001 CROND[1906]: (root) CMD (echo "JISHU***********************")Oct 5 00:52:01 xuexi-001 CROND[1911]: (crontester) CMD (echo "EVEN ************")
crontab 配置文件
- 全局(系统)配置文件
- /etc/crontab
- 注意格式
crontab 日志
- /var/log/cron 文件保存着cron的任务执行记录
[root@xuexi-001 ~]# cd /var/log/您在 /var/spool/mail/root 中有新邮件[root@xuexi-001 log]# ls cron*cron cron-20180611 cron-20180926 cron-20181001[root@xuexi-001 log]# ls -l cron*-rw------- 1 root root 23564 10月 5 01:10 cron-rw-------. 1 root root 10917 6月 11 21:08 cron-20180611-rw-------. 1 root root 11543 9月 26 20:13 cron-20180926-rw------- 1 root root 4043 10月 1 13:22 cron-20181001[root@xuexi-001 log]# tail -f cronOct 5 01:04:01 xuexi-001 CROND[2001]: (crontester) CMD (echo "EVEN ************")Oct 5 01:04:49 xuexi-001 crontab[2005]: (root) LIST (root)Oct 5 01:04:49 xuexi-001 crontab[2005]: PAM pam_end: NULL pam handle passedOct 5 01:05:01 xuexi-001 CROND[2007]: (root) CMD (echo "JISHU***********************")Oct 5 01:06:01 xuexi-001 CROND[2014]: (crontester) CMD (echo "EVEN ************")Oct 5 01:07:01 xuexi-001 CROND[2020]: (root) CMD (echo "JISHU***********************")Oct 5 01:08:01 xuexi-001 CROND[2026]: (crontester) CMD (echo "EVEN ************")Oct 5 01:09:01 xuexi-001 CROND[2032]: (root) CMD (echo "JISHU***********************")
crontab 常见错误
- 环境变量
- 命令行双引号中使用%时,未加反斜线\
- 第三和第五个域之间执行的是“或”操作
- 分钟设置误用
- 第三和第五个域之间执行的是“或”操作
案例
- 四月的第一个星期日早晨1时59分钟运行a.sh
59 1 1-7 4 * test`date + \%w` -eq 0 && /root/a.sh
- 分钟设置误用
案例
- 两小时运行一次
错误示例:* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date正确示例:0 */2 * * * date
说明
在使用分钟的时候如果使用的分钟时使用 * 那么就是每两个小时的每分钟都会执行。正确的应该设置为 0,还有就是在使用分钟设置时,要注意分钟的约束,比如1-10/2,先满足1-10之间的每两分钟也就是1,3,5,7,9的时候执行,在11分钟的时候就不执行了。