2021-05-12 14:32:11
Linux系統下的定時任務Crontab
什麼是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/https://www.linuxidc.com/Linux/2013-06/86401.htm
Linux中用crontab例行工作安排 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-06/85441.htm
Linux crontab不執行問題排查 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-06/85432.htm
Ubuntu使用crontab定時任務 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-05/84770.htm
Linux計劃任務(at batch crontab anacron) http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-03/81584.htm
相關文章