一、特殊符号补充:
容易混淆的
*/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
网友评论