1.1 定时任务介绍
固定时间、或者周期性的执行一项任务便是定时任务
通常使用 cron 定时任务
1)为什么要用定时任务
- 每天0晨要备份数据库的数据,存储的数据,配置文件
运维人员改过的配置,软件配置,内核参数配置,用户存放的数据都需要备份。 - 数据报表统计
- 定时发微信、邮件
- 每分钟,每小时执行,人为没有精力的
2)cron 定时任务介绍
- cron 定时任务软件依赖于 crond 服务
- 通过 crontab 命令可以配置周期性执行的定时任务工作计划,例如:每五分钟做一次服务器时间同步
- 要使得 crontab 命令设定的配置生效,还需要先启动一个服务 crond 才行
1.2 crontab 命令
1.2.1 常用参数
参数 | 作用 |
---|---|
-l | 查看定时任务列表 |
-e | 编辑定时任务列表 |
1.2.2 配置文件
1)/var/spool/cron/
定时任务在 /var/spool/cron/ 以用户名字命名的文件,文件里就是定时任务的指令
- 用root配置的定时任务 /var/spool/cron/root(是要备份的)
- 用oldboy配置的定时任务 /var/spool/cron/oldboy
2)/etc/cron.deny
该文件中所列用户不允许使用 crontab 命令,不常用
3)/etc/cron.allow
该文件中所列用户允许使用 crontab 命令,优先于 /etc/cron.deny
1.3 定时任务
1.3.1 定时任务书写格式
* * * * * cmd
- - - - - -
| | | | | |
| | | | | +----- 执行的命令或者脚本
| | | | +---------- 星期中星期几 (0 - 7) (0 和 7 皆为星期日)
| | | +--------------- 月份 (1 - 12)
| | +-------------------- 一个月中的第几天 (1 - 31)
| +------------------------- 小时 (0 - 23)
+------------------------------ 分钟 (0 - 59)
1.3.2 定时任务书中特殊字符含义
特殊符号 | 含义 |
---|---|
* | *号,表示任意时间都,实际就是“每”的意思。举例: |
– | 减号,表示分隔符,表示一个时间范围,区间段 |
, | 逗号,表示分隔时段的意思。 |
/n | n代表数字,即“每隔n单位时间” |
1.3.3 定时任务依赖服务
# systemctl start crond
# systemctl enable crond
- 在编辑定时任务文件后,无需重启定时任务,crond 会自动检查更改的变化
- 当定时任务不能正确执行时,请查看定时任务日志文件(/var/log/cron)获取故障信息
1.3.4 定时任务Cron的使用实例
oldboy.sh 脚本内容
echo "oldboy" >>/tmp/test.txt
实例1:每1分钟执行执行oldboy.sh脚本
* * * * * /bin/sh /scripts/oldboy.sh
实例2:每小时的第3和第15分钟执行执行oldboy.sh脚本
3,15 * * * * /bin/sh /scripts/oldboy.sh
实例3:在上午8点到11点的第3和第15分钟执行执行oldboy.sh脚本
3,15 8-11 * * * /bin/sh /scripts/oldboy.sh
实例4:每隔两天的上午8点到11点的第3和第15分钟执行执行oldboy.sh脚本
3,15 8-11 */2 * * /bin/sh /scripts/oldboy.sh
实例5:每周一上午8点到11点的第3和第15分钟执行执行oldboy.sh脚本
3,15 8-11 * * 1 /bin/sh /scripts/oldboy.sh
实例6:每晚的21:30执行oldboy.sh脚本
30 21 * * * /bin/sh /scripts/oldboy.sh
实例7:每月1、10、22日的4 : 45执行oldboy.sh脚本
45 4 1,10,22 * * /bin/sh /scripts/oldboy.sh
实例8:每周六、周日的1 : 10执行oldboy.sh脚本
10 1 * * 6,0 /bin/sh /scripts/oldboy.sh
实例9:每天18 : 00至23 : 00之间每隔30分钟执行oldboy.sh脚本
0,30 18-23 * * * /bin/sh /scripts/oldboy.sh
实例10:每星期六的晚上11 : 00 pm执行oldboy.sh脚本
0 23 * * 6 /bin/sh /scripts/oldboy.sh
实例11:每一小时执行oldboy.sh脚本
0 */1 * * * /bin/sh /scripts/oldboy.sh
实例12:晚上11点到早上7点之间,每隔一小时执行oldboy.sh脚本
0 23-7/1 * * * /bin/sh /scripts/oldboy.sh
1.4 生产环境定时任务书写要领
- 为定时任务规则加必要的注释
- 尽量以脚本形式执行
- 在执行的Shell脚本前加上/bin/sh
- 定时任务配置结尾加>/dev/null 2>&1
- 在指定用户下执行相关定时任务
- 生产任务计划程序中不要随意打印输出信息
- 执行的脚本要存放到规范路径下
- 配置定时任务要规范操作过程,减少出错
- 定时任务脚本中程序命令及路径尽量用全路径
- 时间变量%号要用反斜线转义
- 若脚本中调用了系统环境变量,要重新定义
1.5 调试cron定时任务的技巧总结
- 增加执行任务频率调试任务
- 调整系统时间调试任务(不能用于生产环境)
- 通过重定向日志输出调试定时任务
- 通过/var/log/cron来调试任务
本文链接:https://www.yunweibase.com/archives/710
网友评论comments