美文网首页
Linux运维-day24-定时任务(下部)

Linux运维-day24-定时任务(下部)

作者: 文娟_狼剩 | 来源:发表于2019-04-28 15:07 被阅读0次
    定时任务.png

    一、特殊符号补充:

    容易混淆的

        */1 * * * * date >>/tmp/oldboy.txt    每个1分钟
        * * * * * date >>/tmp/oldboy.txt      每个1分钟
        1 * * * * date >>/tmp/oldboy.txt      每小时的第1分钟
        -   表示范围(09-12)
        ,   表示不连续,没有规(08,09,12)
    

    小练习:

    #每天晚上09点到12点运行systemctl restart network命令
    00 21-23,00 * * * systemctl restart network
    #每天上午7点到12点每2个小时和晚上22点运行 systemctl restart network 命令
    00 07-12/2,22 * * * systemctl restart network
    

    一、定时任务实际备份案例※※※

    #每天晚上12点打包备份/etc/目录到/tmp下面
    第一个里程碑-命令行测试(测试命令是否OK)

    [root@oldboyedu ~]# tar zcf /tmp/etc-$(date +%F).tar.gz /etc/
    tar: Removing leading `/' from member names
    检查是否创建成功
    [root@oldboyedu ~]# ll /tmp
    total 11428
    -rw-r--r--  1 root   root   10193812 Apr 28 09:54 etc-2019-04-28.tar.gz
    解压到指定目录,查看备份的内容是否正确
    [root@oldboyedu ~]# tar tf /tmp/etc-2019-04-28.tar.gz 
    etc/fstab
    etc/crypttab
    etc/resolv.conf
    

    第二个里程碑-书写脚本并进行测试

    创建脚本存放目录
    [root@oldboyedu ~]# mkdir /server/scripts
    mkdir: cannot create directory ‘/server/scripts’: File exists(已经存在,无需创建)
    创建脚本文件
    [root@oldboyedu ~]# touch /server/scripts/bak-etc.sh
    vim写入到脚本文件中
    [root@oldboyedu ~]# vim /server/scripts/bak-etc.sh
    tar zcf /tmp/etc-$(date +%F).tar.gz /etc/
    执行脚本是否正确
    [root@oldboyedu ~]# sh /server/scripts/bak-etc.sh
    

    第三个里程碑-写入定时任务(每分钟执行,检查)

    编辑定时任务
    [root@oldboyedu ~]# crontab -e
    #每分钟备份etc下的conf后缀的文件
    * * * * * sh /server/scripts/bak-etc.sh                                       
    

    :wq后检查定时任务是否执行成功,看以下两点:

    看结果:crontab -l 并 ll /tmp/etc-2019-04-28.tar.gz
    看日志:tail -f /var/log/cron

    第四个里程碑-写入定时任务(根据要求修改时间)

    00 00 * * * sh /server/scripts/bak-etc.sh                                       
    

    注:书写脚本排错
    1>先运行里面的脚本
    2>运行脚本,显示脚本的执行过程sh -x /server/scripts/bak-etc.sh
      带+的就是脚本执行过程
      加号越多,越优先执行

    二、定时任务坑※※※

    1>书写脚本一定要加上注释
    2>书写定时任务的时候,尽量使用脚本
    3>运行脚本的时候使用sh
    4>在定时任务中%有特殊含义,相当于回车,如实在需要,加上
    5>在定时任务与脚本中,都使用绝对路径

    如果不写绝对路径,会取哪里找文件?
    ① 用户的定时任务:会去用户的家目录里面找
    ②系统定时任务:会找根下

    6>在定时任务里面,每个命令或脚本定向到空或追加到文件中※※※

    预备姿势:
        1>/dev/null(定向到黑洞)
            用法:>/dev/null 2>&1 正确的信息和错误的信息,都定向到黑洞中
        2>追加到文件
            >>/tmp/cron.log 2>&1 正确的信息和错误的信息,都定向到文件中
    原因:
        如果不定向到空或追加到文件中,定时任务会以邮件的形式把输出到屏幕的内容,发给你
    故障案例:定向任务没有定向到空或追加到文件的故障
        1>系统邮件服务开启
            你就会不断受到邮件(You have mail in /var/spool/mail/root)
        2>系统邮件服务关闭(大部分情况)
            把没有发送出去的邮件,临时放起来(/var/spool/postfix/maildrop),这个目录下面会有大量的小文件,回导致inode满了
                关闭邮件服务:
                    临时关闭:systemctl stop postfix.service
                    永久关闭:systemctl disable postfix.service
    

    7>定时任务运行脚本环境变量的问题※※※

    定时任务运行脚本的时候PATH只识别/usr/bin和/bin下的命令

    解决:
      ①使用命令的时候使用绝对路径
      ②在脚本的开头,重新设置下PATH

    . /etc/profile
    source /etc/profile

    [root@oldboyedu ~]# vim /server/scripts/date_ip.sh 
    #!/bin/bash
    date
    /sbin/ip a s eth0|awk -F'[ /]+' 'NR==3{print $3}'
    
    #!/bin/bash
    . /etc/profile
    #或者source /etc/profile
    date
    ip a s eth0|awk -F'[ /]+' 'NR==3{print $3}'
    
    image.png

    三、检查定时任务相关的服务是否开启※※※

    1>定时任务的服务是否运行:

        当前定时任务是否运行
            ps -ef|grep cron
            systemctl is-active crond
        定时任务是否开机自启动
            systemctl is-enabled crond
    

    2>确保rsyslog(系统日志服务)是否运行:system log

        当前是否正在运行
            systemctl is-active rsyslog
        是否开机自启动
            systemctl is-enabled rsyslog
    

    注:CentosOS 6、7中是rsyslog;CentOS 5.x中是syslog

    相关文章

      网友评论

          本文标题:Linux运维-day24-定时任务(下部)

          本文链接:https://www.haomeiwen.com/subject/yjzrnqtx.html