Linux系统下的定时任务Crontab

时间:2021-07-06 22:06:02
  • 什么是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是否正常运行,基本达到实时监控,如果加上邮件通知的话,只要系统出现故障,一分钟之内就能收到邮件通知。



注:如果想设置crontab 定时任务又不想在 crontab l 这样的命令下显示出来, 可以在 /etc/crontab 这个文件里直接写定时任务,这个文件里的定时任务系统会执行, 但是用crontab l 和 crontab e 的命令看不到