linux定时任务crontab用法例解

发布时间:2020-03-31编辑:脚本学堂
有关linux下定时任务工具crontab的用法,包括crontab常用基本命令、定时任务的时间设置、监控mysql数据库是否正常运行、监控apache是否正常运行的例子等。

什么是crontab

crontab是linux系统下的定时任务工具,相当于win7系统的任务计划。

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,操作实例
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/ target=_blank class=infotextkey>apache服务器和mysql/ target=_blank class=infotextkey>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脚本:
 

#!/usr/bin/bash
#

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