在Linux系統管理時,有許多任務需要周期性的操作。如需要每天晚上十二點備份Oracle數據庫系統的數據;需要定期備份部署在Linux系統上的郵箱等等。其實不僅僅是在Linux服務器上需要做這些定期操作,即使在一些客戶端上也不開系統的任務調度功能。如郵箱客戶端會定期檢查遠程郵件服務器的信件等等。
可見任務調度在Linux操作系統中是一項很重要的功能。筆者今天這篇文章就跟大家說說如何才能夠讓Linux系統聽你的調度。
在Linux系統下有很多任務調度命令,如at、crond等命令。不過筆者最喜歡的還是crond命令。它是Linux系統用來定期執行某個應用程序的命令,是Linux系統的自帶命令。默認情況下,當安裝完成操作系統之後,便會自動啟用整個任務調度命令。它每分鐘會定期檢查是否需要執行的任務。如果有要執行任務的工作,便會自動執行這項任務。
如果要查看crond命令的幫助說明,可以在Linux終端下輸入man crond命令。系統就會顯示出這個命令的相關參數。用戶剛開始使用這個命令的時候可能會比較困難。因為Linux系統跟Windows系統不同。後者會提供圖形化的界面向導來幫助管理員建立任務計劃。而在Linux系統中,則Linux系統工程師需要編寫任務調度設置文件來完成這個任務。故要完成一個任務配制文件可能會有一定的難度,因為只要有一點兒誤差(如一個標點符號)這個配置文件都將不會起作用。還好系統中本身就存在一些任務調度文件,我們可以以這個文件為藍圖,來做好任務調度規劃。
一、系統任務調度文件賞析。
是系統的一個任務調度文件crontab。從這個文件中,我們可以了解一些編制任務調度文件的基本規則以及相關技巧。如果管理員能夠把這個文件吃透,那麼離任務調度專家也就不遠了。
1、任務調度計劃文件怎麼取名。crontab是系統的一個任務調度文件。可以看到這個文件的名字是以cron為前綴的。為此,我們一看到這個文件就可以非常直觀的了解到這就是一個任務調度文件。故系統管理員在建立自己的任務調度文件的時候,最好也能夠以這個cron前綴開頭,以提高文件名字的可讀性。另外需要注意的一點就是,在Linux系統下跟其他操作系統有一個很大的不同,計文件名字或者文件加名字都是區分大小寫的。也就是說,cron與 Cron是兩個不同的文件。為了防止搞混,在給文件取名的時候,最後都采用小寫的文件名字。免得後續調用這個文件的時候,出錯。
2、為調度計劃添加相關的說明。俗話說,好記性不如爛筆頭。也許管理員剛開始記得這個任務調度文件是為什麼建立的。但是,一年兩年之後,或者以後有別人來接替你的工作,就不知道這個文件到底有什麼用。為此,對任務調度文件進行一定的備注說明是必要的。系統任務調度文件就利用#符號,來進行配置。對於這備注,筆者再提一個小建議。在進行備注時,最好采用英文。如果你英文真的很差,那麼不妨采用拼音。也就是說,要盡量避免采用中文來進行備注。如果采用備注,在某些情況下可能會出現亂碼。如通過SSH協議遠程管理Linux服務器時,中文就很可能無法正常顯示。
3、任務文件需要制定程序運行的基本環境。系統任務調度文件中,就主要制定了四個基本參數。第一個是指定執行任務調度工作時所使用的 shell;第二個是制定這個命令的存放路徑(或者說指定命令搜索的路徑);第三個是指定是否要輸出結果,上面這個例子中是要把結果輸出給root用戶; 第三個是指定根目錄。這些任務調度工作的基本環境參數種,筆者認為需要說明的是第一個參數,即執行任務調度工作時所有使用的shell。Shell的功能就好像是一座橋梁,在用戶與操作系統之間進行溝通的一座橋梁,提供基本的操作界面。如此系統管理員就可以為操作系統下達各種指令,在用戶與操作系統之間形成一個互動的環境。各種操作系統都有其默認的shell。而且shell種類不同,其所支持的命令也就不經相同。為此,管理員就需要了解自己所需要運行的命令是否是當前所采用的shell所支持的。這是調度任務工作能夠自動執行的關鍵。在必要的情況下,系統管理員需要查看一下系統所采用的shell,來判斷某個命令是否在當前的shell下正常工作。管理員如果要查看其登陸系統時默認使用的shell,則可以通過echo命令來查詢。如管理員可以采用 echo $shel來判斷。然後根據顯示的結果,在任務調度文件中正確填寫所需要采用的shell。
4、指定具體需要執行的命令。最後一步就是指定需要執行哪些調度命令。在這個步驟中,主要是要指定如下幾個方面的內容。一是這些命令用該用什麼帳戶來執行。注意帳戶的權限不同,其可以執行的命令也是不同的。為此後面的命令必須要保證這個用戶有執行的權限。二是要執行的命令。上面這個例子中,run-parts命令會執行隨後目錄中的所有執行文件。而通常情況下,系統會從起初設置的目錄中去查找相關的命令。如果在指定的搜索路徑中找不到這個命令的話,那麼這個任務調度就會失敗。三是需要指定具體執行的周期。如每天的12點20分執行或者每月的1日12點執行或者每周執行一次等等。這個設置比較簡單,只要大家根據編寫規則來寫不會有什麼問題。這個步驟中主要要強調的是帳戶的權限與命令的搜索路徑兩個問題。這是任務調度配置文件中的難點,也是經常容易出錯的地方。管理員需要特別的注意這兩方面的內容。
二、任務調度計劃文件編寫建議。
為了保障任務調度計劃能夠順利的執行,那麼就需要千方百計的保證這個計劃文件的准確性。而要做到這一點,對於剛接觸這個任務調度計劃的人來說,可能比較難。為此,筆者提一些小建議,可以幫助大家提高這個任務配置文件的准確性。
1、任務調度計劃的帳戶與當前帳戶最好一致。也就是說,管理員需要利用某個用戶來執行任務調度工作,則最好以這個用戶登錄系統然後建立調度任務計劃文件。如此做的好處就是可以在建立任務調度文件時,先運行一下相關的命令,看看其是否具有執行這項作業的權限。這就可以防止因為權限不匹配而導致調度任務計劃不能夠執行。
2、在編寫任務調度計劃之前,最好先運行一下這個命令。因為由於shell環境、參數等等都會影響這個命令的自動執行。這就好像在數據庫管理中建立視圖一樣,先編寫查詢語句再創建視圖。故在編寫任務調度計劃文件的時候,也最好先執行命令,然後再把命令內容加入到文件中去。
3、選擇合理的運行時間。系統管理員之所以采用任務調度計劃,主要有兩個意圖。一是讓系統自動執行某個作業,以節省管理員操作的時間;二是在一個特定的時刻,如午後12點運行某個作業,以錯開服務器的運行高峰時間。故在制作這個任務調度計劃的時候,為任務調度工作安排一個合適的運行時間就至關重要