linux學習筆記(實驗樓) 實驗9 Linux任務計劃crontab

一、實驗介紹

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 的格式

 

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) - 鳥哥私房菜