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

2019-04-28  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读