Day23定时任务
什么是定时任务
定点执行某个job
为什么要用
电商秒杀,定点开启、关闭
定时备份
定时清理
时间管理
日志切割(系统日志 定时任务)
日志切割(程序产生的日志删除--实时推送到远端--远端分析--出图)
定时执行--脚本(监控数据库存活状态)
定时爬虫
定时同步
使用情况
系统使用:日志切割(系统日志 定时任务)
个人使用:定时备份 定时清理 时间同步
如何使用
[root@oldboy ~]# vim /etc/crontab
# 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
分 时 日 月 周
* 表示任意的(分、时、日、月、周)时间都执行
- 表示一个时间范围段,5-7点
, 表示分隔时间段,如6,0,4
/1表示每个n单位的时间,如*/10每10分钟
练习
分 时 日 月 周
00 02 * * * ls #每天凌晨两点整执行
00 02 1 * * ls #每月1号凌晨两点整执行
00 02 14 2 * ls #每年2月14号凌晨两点整执行
00 02 * * 7 ls #每周天凌晨两点整执行
00 02 * 6 5 ls #每年六月周五凌晨两点整执行
00 02 14 * 7 ls #每月14号或每周天凌晨两点整执行
00 02 14 2 7 ls #每年2月14号或每周天凌晨两点整执行
*/10 02 * * * ls #每天凌晨两点每10分钟执行
* * * * * ls #每分钟执行
00 00 14 2 * ls #每年2月14号0点整执行
*/5 * * * * ls #每5分钟执行一次
00 02 * 1,5,8 * ls #每年1月5月8月每天凌晨两点整执行
00 02 1-8 * * ls #每月1到8号凌晨两点整执行
0 21 * * * ls #每天晚上9点执行
45 4 1,10,22 * * ls #每月1号10号22号凌晨4点45执行
45 4 1-10 * * l #每月1-10号凌晨4点45执行
3,15 8-11 */2 * * ls #每两个天的8-11点第3分和第15分执行
0 23-7/1 * * * ls #晚上11点到早上7点之间,每一小时执行
15 21 * * 1-5 ls #周一到周五每天晚上9点15执行
计划任务编写实践
1使用root用户每5分钟执行一次时间同步
#1.同步时间
[root@oldboy ~]# ntpdate time.windows.com &>/dev/null
#2.配置定时任务
[root@oldboy ~]# crontab -e -u root
*/5 * * * * ntpdate time.windows.com &>devnull
[root@oldboy ~]# crontab -l -u root
2.每天下午的3点5点,执行一次sync命令
[root@oldboy ~]# crontab -e
*/30 15,17 * * * sync &>/dev/null
3.案例:每天凌晨3点做一次备份,备份/etc/目录到/backup下面
将备份命令写入一个脚本中
每天备份文件名要求格式: 2019-05-01_hostname_etc.tar.gz
在执行计划任务时,不要输出任务信息4) 存放备份内容的目录要求只保留三天的数据
#1.实现如上备份需求
[root@oldboy ~]# mkdir /backup
[root@oldboy ~]# tar zcf $(date +%F)_$(hostname)_etc.tar.gz /etc
[root@oldboy ~]# find /backup -name “*.tar.gz” -mtime +3 -exec rm -f {}\;
#2.先将命令写入一个文件中
[root@oldboy ~]# vim /root/back.sh
mkdir /backup
tar czf $(date +%F)_$(hostname)_etc.tar.gz /etc
find /backup -name ".tar.gz" -mtime =3 -exec rm -f {}\;
#3.配置定时任务
[root@oldboy ~]# crontab -e
00 03 * * * bash /root /back.sh &>/dev/null
crond的注意事项
1)给定时任务注释
2)将需要定期执行的任务写入shell脚本中,避免直接使用命令无法执行的情况。tar date等
3)定时任务的结尾文件一定要有&>/dev/null 或者将结果追加重定向 >>/tmp/date.log文件
4)注意有些命令是无法成功执行的 echo "123">>/tmp.test.log >/dev/null
5)如果一定要使用命令,命令必须使用绝对路径
crond备份
1)通过查找/var/log/cron 中执行的记录,去推算任务执行的时间
2)定时备份/var/log/corn/{username}
crond拒绝某个用户使用
#1.使用root将需要拒绝的用户加入/etc/cron.deny
[root@oldboy ~]# echo "zzz" >>/etc/cron.deny
#2.登录该用户,测试是否能编写定时任务
[zzz@oldboy ~]$ crontab -e
You (zzz) are not allowed to use this program (crontab)
See crontab(1) for more information
crontab
-e 编辑
-r 删除
-l 查看
-u 指定其他用户
/var/spool/cron
默认名称用户名
同步时间 nptdata
故障
系统假死
定时任务被清空
通过查找/var/log/cron 中执行的记录,去推算任务执行的时间
/var/log/cron 过滤cmd
sudo权限