Day23定时任务

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下面

  1. 将备份命令写入一个脚本中

  2. 每天备份文件名要求格式: 2019-05-01_hostname_etc.tar.gz

  3. 在执行计划任务时,不要输出任务信息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权限

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容