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日志,以便检查我们执行的结果,方便进行调试。

你可能感兴趣的:(Linux定时任务-day26)