定时任务的使用

*      *     *      *       *  command to be executed 
分     时    日     月     周   需要执行的命令/脚本

0-59 0-23 1-31 1-12 0-6

          • 命令 :每分钟执行一次
            /10 * 命令:每隔十分钟运行一次

定时任务书写流程

2.1 测试命令是否正确
2.2 把命令写入脚本
2.3 测试脚本是否能执行成功
2.4 把脚本写入定时任务

定时任务练习题

3.1 每5分钟同步一次系统的时间
3.1.1 第一个里程碑--命令行测试命令是否能执行成功
[root@oldboyedu42 ~]# /usr/sbin/ntpdate ntp1.aliyun.com

3.1.2 第二个里程碑-- 写入定时任务
#sync time by zhao 2017
/5 * /usr/sbin/ntpdate ntp1.aliyun.com

3.1.3 第三个里程碑--检查结果
修改系统时间,查看是否会自动恢复
[root@oldboyedu42 ~]# date -s "+100year"
Tue Nov 9 09:32:32 CST 2117
查看定时任务是否执行

3.2 每分钟追加oldboy到/oldboy/oldboy.txt
[root@oldboyedu42-lnb ~]# #每分钟显示系统的时间(年-月-日小时) 追加到/oldboy/time.log
3.2.1 第1个里程碑-命令
[root@oldboyedu42-lnb ~]# date +%F
%H
2017-11-0910
[root@oldboyedu42-lnb ~]# date +%F
%H >>/oldboy/time.log
[root@oldboyedu42-lnb ~]# cat /oldboy/time.log
2017-11-0910
3.2.2 第2个里程碑-把命令写入脚本中并运行
[root@oldboyedu42-lnb ~]# mkdir -p /server/scripts
[root@oldboyedu42-lnb ~]# cat /server/scripts/time.sh
date +%F
%H
[root@oldboyedu42-lnb ~]#
[root@oldboyedu42-lnb ~]# cat /server/scripts/time.sh
date +%F_%H
[root@oldboyedu42-lnb ~]# sh /server/scripts/time.sh
2017-11-09_10
3.2.3 第三个里程碑--把脚本写入定时任务
[root@oldboyedu42-lnb ~]# crontab -l
#print time to file xx xxxxxxxx

          • /bin/sh /server/scripts/time.sh

    /oldboy/time.log
    [root@oldboyedu42-lnb ~]#
    [root@oldboyedu42-lnb ~]# crontab -l |tail -2
    #print time to file xx xxxxxxxx

          • /bin/sh /server/scripts/time.sh

/oldboy/time.log

3.2.4 第4个里程碑-检查
[root@oldboyedu42-lnb ~]# tail /var/log/cron
Nov 9 11:05:01 oldboyedu42-lnb CROND[12091]: (root) CMD (/bin/sh /server/scripts/time.sh

>>/oldboy/time.log)

[root@oldboyedu42-lnb ~]# tail -f /oldboy/time.log
2017-11-09_10
2017-11-09_11
2017-11-09_11

第4章 打包备份/etc/services (每天凌晨2点) 要求每天的名字不同
4.1 第1个里程碑-命令
#tar zcf /tmp/ser.tar.gz /etc/services
#tar zcf /tmp/ser-2017-11-11.tar.gz /etc/services
#tar zcf /tmp/ser-date +%F命令的结果.tar.gz /etc/services
#tar zcf /tmp/ser-$(date +%F).tar.gz /etc/services
[root@oldboyedu42-lnb ~]# tar zcf /tmp/ser-$(date +%F).tar.gz /etc/services
tar: Removing leading `/' from member names
[root@oldboyedu42-lnb ~]# tar tf /tmp/ser-2017-11-09.tar.gz
etc/services
[root@oldboyedu42-lnb ~]#

4.2 第2个里程碑-创建脚本
[root@oldboyedu42-lnb ~]# cat /server/scripts/bak-ser.sh
tar zcf /tmp/ser-$(date +%F).tar.gz /etc/services
[root@oldboyedu42-lnb ~]# sh /server/scripts/bak-ser.sh
tar: Removing leading `/' from member names
[root@oldboyedu42-lnb ~]#
[root@oldboyedu42-lnb ~]# ll /tmp/ser-2017-11-09.tar.gz
-rw-r--r-- 1 root root 127314 Nov 9 12:19 /tmp/ser-2017-11-09.tar.gz
[root@oldboyedu42-lnb ~]# date
Thu Nov 9 12:20:20 CST 2017

4.3 第3个里程碑-写入定时任务-每分钟运行
[root@oldboyedu42-lnb ~]#
[root@oldboyedu42-lnb ~]# crontab -l
#backup /etc/services xx xxxxxxxx

          • /bin/sh /server/scripts/bak-ser.sh >/dev/null 2>&1
            [root@oldboyedu42-lnb ~]# ll /tmp/
            -rw-r--r-- 1 root root 127314 Nov 9 12:28 ser-2017-11-09.tar.gz
            [root@oldboyedu42-lnb ~]# date
            Thu Nov 9 12:28:11 CST 2017
            [root@oldboyedu42-lnb ~]#
            [root@oldboyedu42-lnb ~]# tail /var/log/cron
            Nov 9 12:27:01 oldboyedu42-lnb CROND[35602]: (root) CMD (/bin/sh /server/scripts/bak-ser.sh >/dev/null 2>&1 )
            Nov 9 12:28:02 oldboyedu42-lnb CROND[35610]: (root) CMD (/bin/sh /server/scripts/bak-ser.sh >/dev/null 2>&1 )
            4.4 第4个里程碑-修改定时时间
            [root@oldboyedu42-lnb ~]# crontab -l|tail -2
            #backup /etc/services xx xxxxxxxx
            00 02 * /bin/sh /server/scripts/bak-ser.sh >/dev/null 2>&1

9句箴言

5.1 定时任务规则之前加注释
5.2 使用脚本代替命令行任务(超过两条命令都是用脚本)
5.3 定时任务中date命令%百分号
5.4 运行脚本一定要用/bin/sh或sh
5.5 定时任务中-命令或脚本结果(正确或错误)定向到黑洞或追加到文件
5.6 避免不必要的程序及命令输出
5.7 打包压缩使用相对路径
5.8 定时任务脚本中的程序命令/文件 尽量使用绝对路径
5.9 系统与命令位置有关的环境变量问题

第6章 【企业案例】如果定时任务规则结尾不加>/dev/null 2>&1或者追加到文件中>>/tmp/oldboy 2>&1

6.1 定时任务中-命令或脚本结果(正确及错误)定向到黑洞(>/dev/null 2>&1)
##定向到 >dev/null 2>&1 ==== >dev/null 2>/dev/null
##追加到文件 >>/tmp/oldboy.txt 2>&1

  2>&1  很容易导致硬盘inode空间被沾满,从而系统服务不正常

定时任务中 命令脚本的结果 没有定向到空或文件中

6.2 邮件软件配置文件 /etc/init.d/postfix status 查看是否运行

6.3 .邮件的软件没有开启---大量小文键堆积在/var/spool/postfix/maildroop--导致inode满了

6.4 邮件软件开启了-----定时任务会不断的给root用户发邮件