Linux定时任务-day26
定时任务的基本概述、语法、编写、调试
一、定时任务基本概述
1.什么是crond
crond就是计划任务,类似于闹钟,定点执行。
2.为什么要是用crond
crond主要是做一些周期性的任务
下面是一些使用场景:
场景一:定期备份重要的文件或数据
场景二:促销,准点开启和关闭,抢购接口
场景三:每分钟检测超时订单,超过30分钟未支付的订单进行取消
场景四:每隔5分钟,到各个电商平台刷取订单信息写入自己公司的系统中,进行发货
3.使用情况
①系统级别的定时任务:临时文件清理、系统信息采集等
②用户级别的定时任务:定时备份数据、同步时间、订单超时自动取消等
小结:crond只能控制这个任务多久运行一次,至于是什么任务与crond无关。
二、定时任务的语法
配置文件 /etc/crontab 中记录了时间周期的含义
[root@10 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=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-name command to be executed
# 分 时 日 月 周 用户名 要执行的命令
| 分 时 日 月 周 | 含义 |
|---|---|
| * * * * * | 每分钟都要执行 |
| * 12 * * * | 每天12点的每分钟都要执行 |
| 00 12 3 * * | 每个月3号的12点整执行 |
| 00 12 3 6 * | 每年6月3号的12点整执行 |
| 00 12 * * 3 | 每周三的12点整执行 |
| */20 12 * * * | 每天的12点,每20分钟执行一次:12:00 12:20 12:40
|
| 符号 | 含义 |
|---|---|
| 3,5,7 | 第3、第5、第7 |
| 2-8 | 闭区间[2,8],2到8的整数 |
| */5 | 每隔5单位间隔(分、时、日、月、周) |
三、定时任务的编写
1.命令:crontab
| 选项 | 含义 |
|---|---|
| -e | 编辑定时任务 |
| -l | 查看定时任务 |
| -r | 删除定时任务(谨慎) |
| -u | 指定其他用户 |
2.案例
每天凌晨3点做一次备份?备份/etc/目录到/backup下面 tar
1) 将备份命令写入一个脚本中
2) 每天备份文件名要求格式: 2020-01-01_hostname_etc.tar.gz
3) 存放备份内容的目录要求只保留三天的数据
4) 在执行计划任务时,不要输出任务信息
第一步:先写一个脚本文件
[root@oldboy ~]# vim /opt/backup.sh
#!/usr/bin/bash
#1.使用 tar 命令备份/etc/目录到/backup下面
mkdir -p /backup
tar czf /backup/$(date +%F)_$(hostname)_etc.tar.gz /etc/ &>/dev/null
#2.保留近三天的数据,其余全部删除
find /backup -type f -name "*.tar.gz" -mtime +3 -delete
第二步:编写定时任务
[root@oldboy ~]# crontab -l
#每天凌晨3点,对/etc/做一次备份 by che
00 03 * * * /usr/bin/sh /opt/backup.sh &>/dev/null
第三步:赋予脚本文件执行权限
[root@oldboy ~]# chmod +x /opt/backup.sh
[root@oldboy ~]# ll /opt/
总用量 4
-rwxr-xr-x. 1 root root 264 4月 10 18:14 backup.sh
3.编写思路
1.手动执行命令,然后保留执行成功的结果
2.编写脚本 # 统一路径 例如 /scripts
3.执行脚本 # bash 命令执行,防止脚本没有增加执行权限 chmod +x
4.编写定时任务 # 注释(任务、人、时间),先粘贴脚本执行的命令,再设定执行周期
5.调试定时任务
4.注意事项
①要学会加注释
②将需要定期执行的任务写入到Shell脚本中,避免直接使用命令无法使用的情况
③定时任务的结尾一定要有 &>/dev/null 或者将结果追加重定向 >>/tmp/date.log 文件
④注意有些命令无法成功执行的 echo "123" >>/tmp/test.log &>/dev/null
⑤如果一定要用命令,命令必须使用绝对路径
5.存放定时任务的文件,可对文件进行备份
/var/spool/cron/ 目录下的文件,文件名称为用户名称(username)
6.不允许某一用户使用crontab命令
echo "username" >>/etc/cron.deny
四、定时任务如何调试
crond调试
- 1.调整任务每分钟执行的频率, 以便做后续的调试。
先,手动执行没问题。
再,crond 每分钟执行以下,进行测试。
最后,调整为需要执行的时间,进行执行。 - 2.如果使用cron运行脚本,请将脚本执行的结果写入指定日志文件, 观察日志内容是否正常。
- 3.命令使用绝对路径, 防止无法找到命令导致定时任务执行产生故障。
- 4.通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试。