歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux系統下的定時任務Crontab

Linux系統下的定時任務Crontab

日期:2017/2/28 14:23:13   编辑: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是否正常運行,基本達到實時監控,如果加上郵件通知的話,只要系統出現故障,達到實時郵件通知。

Linux中利用crontab創建計劃任務 http://www.linuxidc.com//Linux/2013-06/86401.htm

Linux中用crontab例行工作安排 http://www.linuxidc.com//Linux/2013-06/85441.htm

Linux crontab不執行問題排查 http://www.linuxidc.com//Linux/2013-06/85432.htm

Ubuntu使用crontab定時任務 http://www.linuxidc.com//Linux/2013-05/84770.htm

Linux計劃任務(at batch crontab anacron) http://www.linuxidc.com//Linux/2013-03/81584.htm

Copyright © Linux教程網 All Rights Reserved