Linux系统计划任务

  1. 1.Crond计划任务概述

    什么是计划任务,计划任务类似于我们平时生活中的闹钟。在Linux系统的计划任务服务crond可以满足周期性执行任务的需求。crond进程每分钟会处理一次计划任务, 计划任务主要是做一些周期性的任务目前最主要的用途是定时备份数据

    Schedule one-time tasks with at. 一次性调度执行 at

    Schedule recurring jobs with cron. 循环调度执行 cron

    Schedule recurring system jobs. 所有计划任务执行中的输出都会以邮件的方式发送给指定用户, 除非重定向

    //循环调度执行cron 进程每分钟会处理一次计划任务

    [root@lxgyw ~]# systemctl status crond.service

    [root@lxgyw ~]# ps aux |grep crond

    root 12010.00.01262641640 ? Ss 11:150:00 /usr/sbin/crond -n

    计划任务分为以下两种情况:

    1.系统级别的定时任务:

    清理系统缓存临时文件清理系统信息采集日志文件切割

    2.用户级别的定时任务:

    定时同步互联网时间定时备份系统配置文件定时备份数据库文件

  2. 2.crond配置文件详解

    文件说明

    /etc/crontab //Crontab配置文件

    /etc/cron.deny //该文件中所列用户不允许使用crontab命令

    /var/spool/cron/* //所有用户定时文件都存放此目录,文件以用户名命名

    /var/log/cron*///定时任务执行后的日志文件,可用来回溯

  3. 3.crond计划任务管理

    crond任务管理

    参数含义指定示例

    [root@lxgyw ~]# crontab --help

    -e 编辑crontab文件内容 crontab -e

    -l 查看crontab文件内容 crontab -l

    -r 删除crontab文件内容 crontab -r

    -u 管理其他用户的计划任务 crontab -u lxgyw -l

    注意: crontab {-l -e}实际上就是在操作/var/spool/cron/username

    crond时间含义

    # 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分钟

    crond编写示例

    00 02 * * * ls //每天2:00整

    00 02 1 * * ls //每月1号2:00整

    00 02 14 2 * ls //每年2月14号2:00整

    00 02 * * 7 ls //每周日2:00整

    00 02 * 6 5 ls //每年6月的周五2:00整

    00 02 14 * 7 ls //每月14号2:00整或每周日2:00整,这两个时间都执行

    00 02 14 2 7 ls //每年 2 月 14 号 2:00 整或者每周日 2:00 整,这两个时间都执行

    00 02 * * * ls //每天2:00整

    * 02 * * * ls //每天2:00中的每一分钟 (逻辑错误)

    * * * * * ls //每分钟执行 ls

    * * 14 2 * ls //2月14号的每分钟(逻辑错误)

    */5 * * * * ls //每隔5分钟

    00 02 * 1,5,8 * ls //每年1,5,8月的每天2:00整

    00 02 1-8 * * ls //每月1到8号的2:00整

    crond书写规范

    //1.为计划任务增加必要的注释

    [root@lxgyw ~]# crontab -l

    ##time sync by lxgyw 2018-00-00

    */5 * * * * /usr/sbin/ntpdate time.windows.com &>/dev/null

    //2.规范计划任务执行脚本存放的路径/soft/scripts/

    [root@lxgyw ~]# crontab -l

    ##backup www to /backup lxgyw 2018-00-00

    0001 * * * /bin/sh /soft/scripts/www_backup.sh &>/dev/null

    //3.执行shell脚本任务前加/bin/sh, 脚本结尾加&>/dev/null

    //调试好后应屏蔽debug输出信息,避免产生系统垃圾占用过多inode, 如需输出日志, 可重定向至日志文件

    [root@lxgyw ~]# crontab -l

    ####backup www to /backup lxgyw 2018-00-00

    0001 * * * /bin/sh /soft/scripts/www_backup.sh &>/dev/null

  4. 4.crond配置编写实例

    [root@lxgyw ~]# crontab -e

    #每天凌晨切割nginx日志

    0000 * * * /bin/sh -x /soft/scripts/cut_nginx.sh &> /soft/scripts/log/nginx.log

    #每天5点备份数据库

    0005 * * * /bin/sh -x /soft/scripts/dump_sql.sh &>/soft/scripts/log/mysql.log

    #每5分钟检测数据库是否正常

    */5 * * * * /bin/sh /soft/scripts/start_mysql.sh &>/dev/null

    //注意:

    1.我们所有的crond服务是运行的程序。而crontab命令用户用来设置定时规则的命令。

    2.crond服务是企业生产工作中常用的重要服务,at很少使用,可以忽略。

    3.几乎每个服务器都会用到crond服务。

  5. 5.crond计划任务调试

    1.调整任务每分钟执行, 检测是否是否正常, 有些任务不要频繁执行
    2.调整系统时间然后在检测任务, 生产不建议直接使用此方式
    3.执行脚本, 将脚本执行输出写入指定日志文件, 观察日志内容是否正常
    4.注意一些任务命令带来的问题echo "lxgyw" >>/tmp/xlw.log &>/dev/null
    5.命令使用绝对路径, 防止无法找到命令导致定时任务执行故障
    6.查看/var/log/cron日志进行调试建议: 将需要定期执行的任务写入脚本中, 建立/soft/scripts目录统一存放脚本, 脚本中命令必须使用绝对路径,手动执行脚本检测输出是否正常, 然后将脚本加入计划任务测试, 测试后无问题将脚本输出写入对应的日志文件中即可。

  • 1.手动执行保留执行命令的正确结果
  • 2.编写脚本
    • 脚本需要统一路径/soft/scripts
    • 脚本开头建议填写注释信息, 包括执行时间、周期、任务
    • 脚本内容复制执行成功的命令至脚本文件中(减少每个环节出错几率)
    • 脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句
    • 脚本执行的输出信息不要随意打印, 可以重定向至其他位置保留或丢入黑洞
  • 3.执行脚本
    • 使用bash执行, 防止脚本没有增加执行权限(/usr/bin/bash)
    • 执行命令以及脚本成功后并复制该命令
  • 4.编写计划任务
    • 加上必要的注释信息, 人、时间、任务
    • 设定计划任务执行的周期
    • 粘贴执行脚本的命令(不要手敲)
  • 5.调试计划任务
    • 增加任务频率测试、调整系统时间测试(不能用于生产)
    • 检查环境变量问题、检查crond服务产生日志进行排查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭亚望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值