linux 中的计划任务之crontab

SOASPX 160 0

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 CST
2018年 10月 05日 星期五 00:01:01 CST
2018年 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代表星期天)

案例

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 restart
0-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 -e
1-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 crontester
0-58/2 * * * * echo "EVEN ************"

查看日志

[root@xuexi-001 ~]# tail -f /var/log/cron
Oct  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 cron
Oct  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 passed
Oct  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分钟的时候就不执行了。

标签: linux

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~