一、實驗介紹
1.1 實驗内容
我們時常會有一些定期定時的任務,如周期性的清理一下/tmp,周期性的去備份一次資料庫,周期性的分析日志等等,可以稱為例行性工作( 就像手機月曆上設定的時間提醒,時間到了會自動運作)。而且有時候因為某些因素的限制,執行該任務的時間會很尴尬。本課程将帶你很好的利用 Linux 系統的計劃工具。
1.2 實驗知識點
- crontab文法
1.3 參考資料
本節部分内容參考以下文檔制作:
- 例行性工作排程(crontab) - 鳥哥私房菜
- Linux Crontab 百度百科
二、crontab的使用
crontab 指令常見于 Unix 和類 Unix 的作業系統之中(Linux 就屬于類 Unix 作業系統),用于設定周期性被執行的指令。
2.1 crontab簡介
crontab 指令從輸入裝置讀取指令,并将其存放于 crontab 檔案中,以供之後讀取和執行。通常,crontab 儲存的指令被守護程序激活,crond 為其守護程序,crond 常常在背景運作,每一分鐘會檢查一次是否有預定的作業需要執行。
通過 crontab 指令,我們可以在固定的間隔時間執行指定的系統指令或 shell script 腳本。時間間隔的機關可以是分鐘、小時、日、月、周的任意組合。
這裡我們看一看crontab 的格式
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gc9QXbm9Fe39DM0YzLcdXSiJDeCF1U3ljQFdEWshzdr1WRBtkYNJ3TyNUUu1mYpFWZMVzYxwmRyEWaadmcy0kRUdHO5JWaHBFNOJ1cNJlMlJUc40GUlJ1NsJFbwVWbthnTYZWTOhncvw1ZuB3X6lmYt12Lc52YuMWawFnL6lmYt12Lc9CX6MHc0RHaiojIsJye.jpg)
2.2 crontab準備
crontab 在本實驗環境中需要做一些特殊的準備,首先我們會啟動 rsyslog,以便我們可以通過日志中的資訊來了解我們的任務是否真正的被執行了(在本實驗環境中需要手動啟動,而在自己本地中 Ubuntu 會預設自行啟動不需要手動啟動)
在本實驗環境中 crontab 也是不被預設啟動的,同時不能在背景由 upstart 來管理,是以需要我們來啟動它(同樣在本實驗環境中需要手動啟動,自己的本地 Ubuntu 的環境中也不需要手動啟動)
2.3 crontab使用
下面将開始 crontab 的使用了,我們通過下面一個指令來添加一個計劃任務
第一次啟動會出現這樣一個畫面,這是讓我們選擇編輯的工具,選擇第二個基本的 vim 就可以了
而選擇後我們會進入這樣一個畫面,這就是添加計劃的地方了,與一般的配置文檔相同,以#号開頭的都是注釋,通過文檔的最後一排我們可以猜猜 crontab 的格式是什麼樣的呢?
詳細的格式可以使用上一節中學習到的 man 指令檢視:
在了解指令格式之後,我們通過這樣的一個例子來完成一個任務的添加,在文檔的最後一排加上這樣一排指令,該任務是每分鐘我們會在/home/shiyanlou目錄下建立一個以目前的年月日時分秒為名字的空白檔案
注意 “ % ” 在 crontab 檔案中,有結束指令行、換行、重定向的作用,前面加 ” \ ” 符号轉義,否則,“ % ” 符号将執行其結束指令行或者換行的作用,并且其後的内容會被做為标準輸入發送給前面的指令。
添加成功後我們會得到最後一排 installing new crontab 的一個提示
當然我們也可以通過這樣的一個指令來檢視我們添加了哪些任務
通過圖中的顯示,我們也可以看出,我們正确的儲存并且添加成功了該任務的‘
雖然我們添加了任務,但是如果 cron 的守護程序并沒有啟動,它根本都不會監測到有任務,當然也就不會幫我們執行,我們可以通過以下2種方式來确定我們的 cron 是否成功的在背景啟動,默默的幫我們做事,若是沒有就得執行上文準備中的第二步了
通過這個截圖我們可以看到任務在建立之後便建立了一個當時時間的檔案(也就是13點20分15秒的時候),後續在每分鐘的01秒時執行一次我們的任務
我們通過這樣一個指令可以檢視到執行任務指令之後在日志中的資訊回報
從圖中我們可以看到分别在13點28、29、30分的01秒為我們在 shiyanlou 使用者的家目錄下建立了檔案
當我們并不需要這個任務的時候我們可以使用這麼一個指令去删除任務
通過圖中我們可以看出我們删除之後再檢視任務清單,系統已經顯示該使用者并沒有任務哦
三、crontab的深入
每個使用者使用 crontab -e 添加計劃任務,都會在 /var/spool/cron/crontabs 中添加一個該使用者自己的任務文檔,這樣目的是為了隔離。
如果是系統級别的定時任務,應該如何處理?隻需要以 sudo 權限編輯 /etc/crontab 檔案就可以。
cron 服務監測時間最小機關是分鐘,是以 cron 會每分鐘去讀取一次 /etc/crontab 與 /var/spool/cron/crontabs 裡面的內容。
在 /etc 目錄下,cron 相關的目錄有下面幾個:
每個目錄的作用:
1./etc/cron.daily,目錄下的腳本會每天執行一次,在每天的6點25分時運作;
2./etc/cron.hourly,目錄下的腳本會每個小時執行一次,在每小時的17分鐘時運作;
3./etc/cron.monthly,目錄下的腳本會每月執行一次,在每月1号的6點52分時運作;
4./etc/cron.weekly,目錄下的腳本會每周執行一次,在每周第七天的6點47分時運作;
系統預設執行時間可以根據需求進行修改。
本章部分描述參考下面的文檔實作,想進一步的學習該知識或者相關知識推薦檢視:
- 例行性工作排程(crontab) - 鳥哥私房菜