linux实战(八)----定时运行----实例运用



我们在前面几章已经学习了一些常用的用法,有时候我们让监控脚本定时运行。


本章学习  在shell中 定时运行脚本。


我们把实战七的脚本设置成定时运行     实现  定时检查完目录空间备份后  发送邮件。



Linux下的定时执行主要是使用crontab文件中加入定时计划来执行。


利用crontab来定时执行任务大致有如下三步:
1、编写shell脚本
2、利用crontab把执行脚本命令加入到定时任务队列
3、查看作业完成情况



回顾实战七的脚本

这里要定时运行的脚本我们使用实战七中的脚本。

这里回顾一下,主要是实现  检查完目录空间备份后 发送邮件,代码如下:

#!/bin/bash 

function GetDiskSpc   
 {   
    if [ $# -ne 1 ]   
    then   
        return 1   
    fi   
  
    Folder="$1$"  
    DiskSpace=`df -k |grep $Folder |awk '{print $5}' |awk -F% '{print $1}'`
    echo $DiskSpace   
 }  
 



function CheckDiskSpc   
 {   
  
 DiskSpace=`GetDiskSpc $1`   
  
 echo "The system $Folder disk space is $DiskSpace%"  
  
  echo "The system $Folder disk space is $DiskSpace%"  >> space.txt
  
 if [ $DiskSpace -gt 90 ]   
 then   
 {   
    echo "The usage of system disk($Folder) is larger than 90%"  
	   echo "The usage of system disk($Folder) is larger than 90%"   >> space.txt
 }   
 else   
 {   
    echo "The usage of system disk($Folder)  is normal"  
	 echo "The usage of system disk($Folder)  is normal"   >> space.txt
 }   
 fi  
  
}  


CheckDiskSpc  /boot  

time=`date +%F` 

tar cvf  - /data/shell/space.txt  > /data/shell/${time}space.tar

rm space.txt

echo "hello,this is the content of mail.welcome to www.mzone.cc" | mail -s "Hello from mzone.cc by pipe"   [email protected]



熟悉crontab

简介

cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。
有一个叫做crontab的命令允许用户提交、编辑或删除相应的作业。
每一个用户都可以有一个crontab文件来保存调度信息。
可以使用它运行任意一个shell脚本或某个命令,每小时运行一次,或一周三次,这完全取决于你。
每一个用户都可以有自己的crontab文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。
系统管理员是通过crond.deny和crond.allow这两个文件来禁止或允许用户拥有自己的crontab文件。



启动

由于cron是Linux的内置服务,但它不自动启动,可以用以下的方法启动、关闭这个服务:
 
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
 
你也可以将这个服务在系统启动的时候自动启动:
 
在/etc/rc.d/rc.local这个脚本的末尾加上:
/sbin/service crond start





启动cron后这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务有两种使用方法,一种是使用命令crontab进行配置,另一种是直接编辑/etc/crontab文件进行配置。






直接用crontab命令编辑

用法

crontab命令的用法为:
crontab [-u user] -e -l -r
其中:
-u 用户名。
-e 编辑crontab文件。
-l 列出crontab文件中的内容。
-r 删除crontab文件。
如果使用自己的名字登录,就不用使用-u选项,因为在执行crontab命令时,该命令能够知道当前的用户。


crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //显示crontab文件。
crontab -r //删除crontab文件。
crontab -ir : 删除 crontab 文件前提醒用户。
crontab -e //编辑某个用户的cron服务,如果文件不存在会自动创建。


 
比如说root查看自己的cron设置:crontab -u root -l
再例如,root想删除fred的cron设置:crontab -u fred -r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e



crontab文件格式

以下是 crontab 文件的格式:
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
minute: 区间为 0 – 59
hour: 区间为0 – 23
day-of-month: 区间为0 – 31
month: 区间为1 – 12. 1 是1月. 12是12月.
Day-of-week: 区间为0 – 7. 周日可以是0或7.

进入vi编辑模式,编辑的内容一定要符合文件的格式,例如:*/1 * * * *  ls >> /tmp/ls.txt

 
这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下: 
分钟 (0-59)
小時(0-23)
日期(1-31)
月份(1-12)
星期(0-6) //0代表星期天
 
除了数字还有几个特殊的符号就是"*"、"/"和"-"、","

"*"代表所有的取值范围内的数字

"/"代表每的意思

"*/5"表示每5个单位

"-"代表从某个数字到某个数字

","分开几个离散的数字。

详情如下:

a     b    c      d     e
*      *     *      *     *       command
分   时   天   月   周         命令
每列表示意义
a. 第一个*表示的是分钟1~59分钟,默认*表示的是每分钟都执行,x-y表示的是x~y这段每分钟都执行,*/n表示每n分钟执行一次,x,y,z表示的是x,y,z分钟都执行。


b. 第二个*表示的是小时1~23小时,默认*表示的是每小时都执行,x-y表示的是x~y这段每小时都执行,*/n表示每n小时执行一次,x,y,z表示的是x,y,z小时都执行。


c. 第三个*表示的是天1~31,默认*表示的是每天都执行,x-y表示的是x~y这段每天都执行,*/n表示每n天执行一次,x,y,z表示的是x,y,z天都执行。


d. 第四个*表示的是月1~12,默认*表示的是每个月都执行,x-y表示的是x~y这个段每月都执行,*/n表示每n分钟执行一次,x,y,z表示的是x,y,z天都执行。


e. 第五个*表示的是周0~6(0表示周天),默认周一~周天都执行,x-y表示周x~周y每天都执行。


以下用几个例子来理解。



例子

30 21 * * * /apps/bin/cleanup.sh
上面的例子表示每晚的21:30运行/apps/bin目录下的cleanup.sh。


45 4  1,10,22  *  * /apps/bin/backup.sh
上面的例子表示每月1、10、22日的4:45运行/apps/bin目录下的backup.sh。


10 1 * *  6,0  /bin/find -name "core" -exec rm {} ;
上面的例子表示每周六、周日的1:10运行一个find命令。


0,30  18-23  * * * /apps/bin/dbcheck.sh
上面的例子表示在每天18:0 0至23:00之间每隔3 0分钟运行/apps/bin目录下的dbcheck.sh。



0 23 * * 6 /apps/bin/qtrend.sh
上面的例子表示每星期六的23:00运行/apps/bin/目录下的qtrend.sh。


0 0 * * * /home/joe/XXXXXXXX.sh

这将会在每天凌晨0:00运行 指定的.sh文件


*/1 * * * *  /home/joe/XXXX.sh
每分钟运行一次命令






编辑/etc/crontab 文件配置cron

前面我们已经学习了直接使用命令进行配置cron定时运行,现在我们学习第二种方法直接编辑配置文件。两种方法都可用。

 cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:
 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/      //使用者运行的路径,这里是根目录
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
 
大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。
************************************************************************************

要增加 定时运行计划,只要  按照格式 在 文件末尾添加进去保存退出即可。




定时运行实例七脚本

首先我们查看系统的时间,因为这里的定时时间是以linux系统的时间为准。

 date +%Y%m%d%X

系统 中的时间是 2016年02月22号 01点03分


我们这里就设置01点05分运行实战七的脚本。

编辑crontab文件

crontab -e

加入

05 13  * * * /data/shell/checkSpace.sh



时间到了之后 脚本成功运行,生成备份文件并且收到邮件。

linux实战(八)----定时运行----实例运用_第1张图片

linux实战(八)----定时运行----实例运用_第2张图片





你可能感兴趣的:(linux,shell,crontab,cron,定时运行)