zoukankan      html  css  js  c++  java
  • 计划任务crond

    计划任务服务程序

    计划任务分为以下两种情况:
    1.系统级别的定时任务:
    清理系统缓存
    临时文件清理
    系统信息采集
    日志文件切割

    2.用户级别的定时任务:
    定时同步互联网时间
    定时备份系统配置文件
    定时备份数据库文件

    crond配置文件详解:

    文件               说明
    /etc/crontab       //crontab配置文件
    /etc/cron.deny     //改文件中所列用户不允许使用crontab命令
    /var/spool/cron/*  //所有用户定时文件都存放此目录,文件以用户名命名
    /var/log/cron*/    //定时任务执行后的日志文件,可用来回溯
     

    计划任务/定时任务:
    在指定的时间,做指定的事
    时间:分时日月周
           格式:
                  * 任意
                  - 连续的
                  , 不连续的
                  / 间隔 */S
           事:命令
           注意事项:
                  绝对路径                   crond和bash的命令PATH不一样
                  特殊符号                   %要用转义符
                  输出重定向               如果命令有输出且没输出重定向,那么这个输出信息会通过邮件通知root,这些输出信息
                  命令的执行顺序        用脚本来进行排序

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

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

    crond配置文件详解

    [root@xiaoming ~]# vim /etc/crontab 
    
    SHELL=/bin/bash                        #通过bash解释命令
    PATH=/sbin:/bin:/usr/sbin:/usr/bin     #默认命令路径
    MAILTO=root                            #邮件信息发给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

    注意:
    1.我们所有的crond服务是运行的程序。而crontab命令用户用来设置定时规则的命令。
    2.crond服务是企业生产工作中常用的重要服务,at很少使用,可以忽略
    3.几乎每个服务器都会用到crond服务

    计划任务:
    一次性计划任务:
        at命令:
            at 时间        //在指定时间执行任务
            at -l          //查看已设置好但还未执行的一次性计划任务
            at -d 任务序号 //删除计划任务
    长期性计划任务:
        crontab命令
            crontab [options]
                参数:
                -e  //创建、编辑计划任务
                -l  //查看当前的计划任务
                -r  //删除某条计划任务
    //指定时间开启httpd
    [root@xiaoming ~]# at 23:30
    at > systemctl restart httpd
    at > 此处请同时按下 Ctrl + D 组合键来结束编写计划任务
    job 2 at Thu Jan  2 23:30:00 2020
    
    //查看未执行的一次性计划任务
    [root@xiaoming sbin]# at -l
    2    Thu Jan  2 23:30:00 2020 a root
    
    //删除计划任务
    [root@xiaoming sbin]# atrm 2
    [root@xiaoming sbin]# at -l 

    练习:

    1.每隔5分钟同步一次系统时间
    yum install -y ntpdate
    crontab -e
    #sync time
    */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
    
    2.备份/etc/hosts文件,要求每天保留一个副本,每天晚上0点执行
    解题思路:
    1.先在命令行测试
    cp /etc/hosts /tmp/hosts_$(date +\%F).bak
    2.编辑crontab
    #backup host
    00 00 * * * /usr/bin/cp /etc/hosts /tmp/hosts_$(date +\%F).bak
    
    3.备份/etc/hosts,/etc/rc.local,/var/spool/cron/root文件,要求每天保留一个副本,每天晚上3点15分执行
    1.先在命令行测试
    tar czf /tmp/bak_$(date +\%F).tar.gz /etc/hosts /etc/rc.local /var/spool/cron/root 
    2.编辑crontab
    #backup /etc/hosts /etc/rc.local /var/spool/cron/root
    15 03 * * * /usr/bin/tar czf /tmp/bak_$(date +\%F).tar.gz /etc/hosts /etc/rc.local /var/spool/cron/root 

    思考题:

    通过crontab实现一个时间节点操作多条指令,会出现什么问题?

    1.先测试命令是否能执行
    2.写脚本
    [root@xiaoming ~]# cat mem.sh 
    /usr/bin/date +\%F >> /tmp/mem.log
    /usr/bin/free -m >> /tmp/mem.log
    3.测试脚本是否能执行
    4.将脚本执行的命令写入crontab
    * * * * * /bin/sh /root/test.sh >>/tmp/test.txt
    * * * * * /bin/sh /root/mem.sh >>/tmp/mem.log

    计划任务课后习题

    1.解释下列每行时间含义
    a. 0 13,20 * 1,2,3,4,5 * /bin/sh backup.sh
    //1月到5月的每天下午1点到晚上8点准时执行backup.sh脚本
    b. 0 13,20 1,5 * *       /bin/sh backup.sh
    //每月的一号、五号的下午1点到晚上8准时执行backup.sh脚本
    c. * 13,20 * * 1,2,3,4,5 /bin/sh backup.sh
    //1月到5月的每天下午1点到晚上8点的每一分钟执行backup.sh脚本
    d. 0 13,20 * * 1,2,3,4,5 /bin/sh backup.sh
    //每周一到周五的下午1点到晚上8点准时执行backup.sh脚本
    
    2.新建/soft/scripts/httpd.sh文件,并让/soft/scripts/httpd.sh脚本在每天的00:10分执行
    mkdir -p /soft/scripts
    echo "echo hello" >/soft/scripts/httpd.sh
    10 00 * * * /bin/sh /soft/scripts/httpd.sh &>/dev/null
    
    3.新建/backup目录,每周一下午5:50将/backup目录下的所有文件打包成backup.tar.gz
    50 17 * * 1 /usr/bin/tar czf backup.tar.gz /backup/* &>/dev/null
     
    4.书写一个定时任务,每天0点0分把/var/log/nginx下大于7天文件转移到/backup/2019_xx_xx的目录中
    vim /server/scripts/bak.sh
    dirname=$(date +%F)
    mkdir -p /backup/$dirname
    /usr/bin/find /var/log/nginx -mtime +7 -type f -exec mv {} /backup/$dirname ;  
    0  0  * * * /bin/sh /server/scripts/bak.sh &>/dev/null
    
    5.系统脚本/soft/scripts/which.sh,如何定时每隔7分钟执行一次?
    */7  0  * * * /bin/sh /soft/scripts/bak.sh &>/dev/null
    6.如果不小心删除/var/spool/cron/root文件,该如何恢复。
    提示:通过日志文件
    [root@xiaoming ~]# tail /var/log/cron
    Jan  7 00:01:01 xiaoming run-parts(/etc/cron.hourly)[1397]: starting 0anacron
    Jan  7 00:01:01 xiaoming anacron[1406]: Anacron started on 2020-01-07
    Jan  7 00:01:01 xiaoming anacron[1406]: Normal exit (0 jobs run)
    Jan  7 00:01:01 xiaoming run-parts(/etc/cron.hourly)[1408]: finished 0anacron
    Jan  7 00:01:16 xiaoming crontab[1410]: (root) BEGIN EDIT (root)
    Jan  7 00:01:28 xiaoming crontab[1410]: (root) REPLACE (root)
    Jan  7 00:01:28 xiaoming crontab[1410]: (root) END EDIT (root)
    Jan  8 00:00:27 xiaoming crond[700]: (root) RELOAD (/var/spool/cron/root)
    Jan  8 00:00:27 xiaoming CROND[1417]: (root) CMD (/bin/sh /server/scripts/bak.sh )
    Jan 11 00:00:15 xiaoming CROND[1426]: (root) CMD (/bin/sh /server/scripts/bak.sh )
    
    [root@xiaoming ~]# crontab -e
    0  0  * * * /bin/sh /server/scripts/bak.sh
    ~    
    //从cron日志里采集root用户的任务指令
    [root@xiaoming ~]# grep 'CMD' /var/log/cron | grep 'root' | awk -F"(" '{print $3}' | awk -F")" '{print $1}' | sort | uniq -c | awk '{print $2,$3,$4}' | grep 'bak' | head -1
    /bin/sh /server/scripts/bak.sh 
    //从cron日志里采集root用户的时间,以分时日月周格式输出
    [root@xiaoming ~]# grep 'CMD' /var/log/cron | grep 'root' | awk '{print $3}' | tail -1 | awk -F":" '{print $2,$1,"*","*","*"}'
    01 00 * * *
    [root@xiaoming ~]# ls /etc/cron.*
    /etc/cron.deny
    
    /etc/cron.d:
    0hourly
    
    /etc/cron.daily:
    logrotate  man-db.cron  mlocate
    
    /etc/cron.hourly:
    0anacron
    
    /etc/cron.monthly:
    
    /etc/cron.weekly:
  • 相关阅读:
    简析时序数据库 InfluxDB
    tensorflow_1.x(四):线性回归问题初步(准备数据、构建模型、训练模型、进行预测)
    (二) 差分隐私直观理解
    (一) 差分隐私
    (四)PyTorch 的 torch.backends.cudnn.benchmark
    (三)PyTorch 的 Autograd
    (二)PyTorch 中的 tensor 及使用
    (一)PyTorch 中的 ModuleList 和 Sequential
    文本分类(六):不平衡文本分类,Focal Loss理论及PyTorch实现
    tensorflow_1.x(三):Tensorflow2入门(基础、张量、常量与变量、变量的赋值、计算模型、图执行模式、兼容1.0、会话、变量、占位符、feed提交数据)
  • 原文地址:https://www.cnblogs.com/xmtxh/p/12146643.html
Copyright © 2011-2022 走看看