首頁 > 軟體

Linux系統下的定時任務Crontab

2020-06-16 18:10:09

什麼是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 


IT145.com E-mail:sddin#qq.com