Brc's blog
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于

Brc

努力中
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于
  • Linux基础

    • Bash shell
    • 文件属性
    • 编辑工具vim
    • 用户管理
    • 用户组管理
    • 普通用户提权
    • 基础权限
    • 特殊权限
    • 文件特殊属性
    • IO重定向
    • 文件查找
    • 文件压缩
    • 软件包管理

    • 磁盘管理

    • 进程管理
    • 计划任务
      • 什么是crond
      • 为什么要使用crond
      • 计划任务两大类
      • 计划任务基本应用
        • 计划任务时间周期
        • 计划任务编写规范
      • 使用crontab实现计划任务
      • 计划任务编写实践
      • 计划任务注意的事项
      • 计划任务如何备份
      • 拒绝特定用户使用
      • 计划任务编写思路
    • systemd
    • Supervisor
    • 网络管理

    • Chrony时间同步
    • NFS网络文件系统
  • Linux进阶

  • 其他

  • 运维
  • Linux基础
Brc
2021-08-03
目录

计划任务

# 什么是crond

  • crond就是计划任务,类似于我们平时生活中的闹钟,定点执行。

# 为什么要使用crond

  • crond主要是做一些周期性的任务。
    • 场景1:定期备份重要的文件或数据;
    • 场景2:促销活动,准点开启抢购接口,准点关闭抢购接口;
    • 场景3:每分钟检测超时订单,超过30分钟未支付的订单进行取消;
    • 场景4:每隔5分钟上各个电商平台刷取订单信息写入自己公司的系统;

# 计划任务两大类

  • 系统级别的定时任务:临时文件清理、系统信息采集、日志文件切割;
  • 用户级别的定时任务:定时备份数据,同步时间,订单超时自动取消,按时间段统计信息等等;

# 计划任务基本应用

# 计划任务时间周期

  • crontab配置文件记录了时间周期的含义;

    [root@web ~]# vim /etc/crontab
    SHELL=/bin/bash           # 执行命令的解释器
    PATH=/sbin:/bin:/usr/sbin:/usr/bin # 环境变量
    MAILTO=root             # 邮件发给谁
    # 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 # 星期
    # | | | | |
    # * * * * *  command to be executed
    
    # * 表示任意的(分、时、日、月、周)时间都执行
    # - 表示一个时间范围段, 如5-7点
    # , 表示分隔时段, 如6,0,4表示周六、日、四
    # /1 表示每隔n单位时间,如*/10 每10分钟
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

# 计划任务编写规范

  • 如下是已编写好的计划任务示例;

    * * * * * ls			# 每分钟都执行
    00 02 * * * ls   	# 每天的凌晨2点整执行
    00 02 1 * * ls   	# 每月的1日的凌晨2点整执行
    00 02 14 2 * ls   	# 每年的2月14日凌晨2点执行
    00 02 * * 7 ls   	# 每周天的凌晨2点整执行
    00 02 * 6 5 ls   	# 每年的6月周五凌晨2点执行
    00 02 14 * 7 ls   	# 每月14日或每周日的凌晨2点都执行
    00 02 14 2 7 ls   	# 每年的2月14日或每年2月的周天的凌晨2点执行
    */10 02 * * * ls  	# 每天凌晨2点,每隔10分钟执行一次
    00 00 14 2 * ls  	# 每年2月14日的凌晨执行命令
    */5 * * * * ls   	# 每隔5分钟执行一次
    00 02 * 1,5,8 * ls 	# 每年的1月5月8月凌晨2点执行
    00 02 1-8 * * ls  	# 每月1号到8号凌晨2点执行
    0 21 * * * ls    	# 每天晚上21:00执行
    45 4 1,10,22 * * ls 	# 每月1、10、22日的4:45执行
    45 4 1-10 * * ls   	# 每月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  	# 周一到周五每天晚上21:15执行
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

# 使用crontab实现计划任务

  • crontab命令,及相关选项;

    参数 含义
    -e 编辑定时任务
    -l 查看定时任务
    -r 删除定时任务
    -u 指定其他用户

# 计划任务编写实践

  • 定时时间同步;

    • 使用root用户每5分钟执行一次时间同步;
    # 1.如何同步时间
    [root@web ~]# ntpdate time.windows.com &>/dev/null
    
    # 2.配置定时任务
    [root@web ~]# crontab -e -u root
    [root@web ~]# crontab -l -u root
    */5 * * * * ntpdate time.windows.com &>/dev/null
    
    1
    2
    3
    4
    5
    6
    7
  • 每半小时sync;

    • 每天的下午3,5点,每隔半小时执行一次sync命令;
    [root@web ~]# crontab -l
    */30 15,17 * * * sync &>/dev/null
    
    1
    2
  • 每天备份文件;

    • 每天凌晨3点做一次备份,备份/etc/目录到/backup下面;

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

      2. 每天备份文件名要求格式:2021-08-03_hostname_etc.tar.gz

      3. 在执行计划任务时,不要输出任务信息;

      4. 存放备份内容的目录要求只保留三天的数据;

    # 1.实现如上备份需求
    [root@web ~]# mkdir /backup
    [root@web ~]# tar zcf $(date +%F)_$(hostname)_etc.tar.gz /etc
    [root@web ~]# find /backup -name "*.tar.gz" -mtime +3 -exec rm -f {}\;
    
    # 2.将命令写入至一个文件中
    [root@web ~]# vim /root/back.sh
    mkdir /backup
    tar zcf $(date +%F)_$(hostname)_etc.tar.gz /etc
    find /backup -name "*.tar.gz" -mtime +3 -exec rm -f {}\;
    
    # 3.配置定时任务
    [root@web ~]# crontab -l
    00 03 * * * bash /root/back.sh &>/dev/null
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

# 计划任务注意的事项

  • 给定时任务注释;
  • 将需要定期执行的任务写入Shell脚本中,避免直接使用命令无法执行的情况(tar date);
  • 定时任务的结尾一定要有&>/dev/null或者将结果追加重定向>>/tmp/date.log文件;
  • 注意有些命令是无法成功执行的echo "123" >>/tmp/test.log &>/dev/null;
  • 如果一定要是用命令,命令必须使用绝对路径;

# 计划任务如何备份

  • 通过查找/var/log/cron中执行的记录,去推算任务执行的时间;
  • 定时的备份/var/spool/cron/{usernmae};

# 拒绝特定用户使用

  1. 使用root将需要拒绝的用户加入/etc/cron.deny

    [root@web ~]# echo "bi" >> /etc/cron.deny
    
    1
  2. 登陆该普通用户,测试是否能编写定时任务

    [bi@web ~]$ crontab -e
    You (bi) are not allowed to use this program (crontab)
    See crontab(1) for more information
    
    1
    2
    3

# 计划任务编写思路

  1. 手动执行命令,然后保留执行成功的结果;

  2. 编写脚本;

    1. 脚本需要统一路径/scripts;
    2. 脚本内容复制执行成功的命令(减少每个环节出错几率);
    3. 脚本内容尽可能的优化,使用一些变量或使用简单的判断语句;
    4. 脚本执行的输出信息可以重定向保留至其他位置或写入/dev/null;
  3. 执行脚本;

    1. 使用bash命令执行,防止脚本没有增加执行权限(/usr/bin/bash);
    2. 执行脚本成功后,复制该执行的命令,以便写入cron;
  4. 编写计划任务;

    1. 加上必要的注释信息,人、时间、任务;
    2. 设定计划任务执行的周期;
    3. 粘贴执行脚本的命令(不要手敲);
  5. 调试计划任务;

    1. 增加任务频率测试;
    2. 检查环境变量问题;
    3. 检查crond服务日志;
#Linux
Last Updated: 2021/11/25, 10:57:04
进程管理
systemd

← 进程管理 systemd→

最近更新
01
谷歌云创建GKE集群
07-26
02
ElastiCacheForRedis启用密码
07-26
03
upload-to-gcs
06-29
更多文章>
Theme by Vdoing | Copyright © 2021-2024 Brc | MIT License | 浙ICP备19031881号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式