红联Linux门户
Linux帮助

Linux系统下的定时任务Crontab

发布时间:2015-02-16 09:54:13来源:linux网站作者:linux人

什么是Crontab

Crontab是Linux系统下的定时任务工具,相当于WIN7系统的任务计划,能够让系统定时做出详见 Cron

Crontab能用来做什么

Crontab能用来添加Linux或者Unix系统中的定时任务,让系统定时执行某个命令,比如服务器的数据库需要每天凌晨重启下,不可能每天凌晨起来手动重启。可以用Crontab添加凌晨5点重启数据库的定时任务,系统到每天凌晨5点就会自动重启数据了。

Crontab能做的事情还很多,比如定时发送邮件,定时检验库存,定时清理日志,定时备份数据库,总之只要是具有周期性执行的任务基本都可以用Crontab来实现,当然前提在Linux系统环境下。


Crontab简单使用

1.常用基本命令
crontab -l  列出当前登录用户所有定时任务
crontab -l -u XXX  列出XXX用户的所有定时任务,如有没有会提示 no crontab for XXX
crontab -e  编辑当前用户的定时任务
crontab -r  删除当前用户的定时任务
2.定时任务的时间设置
* * * * *               每分钟执行
*/1 * * * *           每分钟执行
0 5 * * *                每天五点执行
0-59/2 * * * *        每隔两分钟执行,且是偶数分钟执行,比如2,4,6
1-58/2 * * * *        每隔两分钟执行,且是奇数分钟执行,比如3,5,7
0 0 1,5,10 * *        每个月1号,5号,10号执行
0 0 1-5 * *            每个月 1到5号执行

3.Demo
(1)执行命令: crontab -e

(2)输入 * * * * * date >> /tmp/date.log

(3)保存后,系统会提示crontab: installing new crontab

(4)执行命令: tail -f /tmp/date.log 就能看到系统每分钟都会打印出时间到date.log这个文件


用Crontab+Shell实现实时监控系统

在系统网站的运营过程中,我们需要知道网站或者系统是否24小时在正常运行,一般系统正常运作需要两个东西在支持,一个是web服务器,一个是数据库。
那么我们就需要实时的监控web服务器和数据库是否在运行。下面我们以apache服务器和mysql数据库作为例子来分析如何实现需求。
1.监控mysql数据库是否正常运行
正常情况我们登录一台Linux服务器后,想要查看当前服务器Mysql是否在运行,我们会执行 pgrep mysql查看,如果有打印出进程ID说明mysql是正常在运行的。
根据这个原理可以写出如下SHELL脚本:

#!/bin/bash
check=`pgrep mysql`
if [ -n "$check" ]; then
exit
else
date=$(date +"%Y-%m-%d %H:%M:%S")
/etc/init.d/mysqld restart
echo 'mysqld exception at' $date 'and restart '
fi

判断是否存在进程 mysql,存在则正常不存在则说明mysql可能挂了,可以执行重启操作,当然你也可以直接发送邮件到指定邮箱。

2.监控apache是否正常运行根据监控mysql的经验,我们可以这样写SHELL脚本:

#!/bin/bash
check=`pgrep httpd`
if [ -n "$check" ]; then
exit
else
date=$(date +"%Y-%m-%d %H:%M:%S")
/etc/init.d/httpd restart
echo 'apache exception at' $date 'and restart '
fi

还有种可能是apache可能不在同一台服务器上,则可以用下面的SHELL脚本实现:

if curl -m 10 -G localhost:81 > /dev/null 2>&1
then
echo 'server is running'
else
if ping -c 1 localhost > /dev/null 2>&1
then
echo 'server exception but ip ping success'
fi
fi

原理类似于直接访问URL判断是否有响应,分别判断apache端口和服务器IP。如果系统访问无响应有可能是apache服务挂了,还有一种可能是服务器挂了,所以用PING 的方式来判断服务器是否正常。

最后一步,就是把以上两个脚本添加到定时任务中去执行:

crontab -e

* * * * * sh /alidata/test/mysqlListener.sh >> /var/log/mysqlL.log

* * * * * sh /alidata/test/httpdListener.sh >> /var/log/httpdL.log

这样就每分钟都会去判断apache和mysql是否正常运行,基本达到实时监控,如果加上邮件通知的话,只要系统出现故障,达到实时邮件通知。