系統管理必讀:任務調度工作計劃使用心得
無論在Linux操作系統中還是在Windows操作系統中,任務計劃都是一個非常有用的系統管理工具。如可以通過任務計劃,讓操作系統自動監視硬盤使用情況。每天統計一次,如果硬盤的空間少于5%時就自動向系統管理員報告,等等。為此作為一名合格的系統管理員,必須要深入了解這個工具的應用。具體來說,以下幾方面內容是筆者要強調的。
一、合理定位任務調度程序的輸出結果。
任務調度程序默認情況下會輸出兩種類型的結果信息,分別為運行的結果(如果命令中定義要輸出一定的結果)和錯誤信息(如沒有正常運行這個任務計劃的錯誤提示)等等。對于這些結果信息,系統管理員需要明確的是兩個內容,分別為是否需要這些信息,以及將這些信息存放到什么地方。
在Linux操作系統,即可以顯示正常的結果信息,而不顯示錯誤信息;也可以兩個都顯示等等。甚至可以什么信息都不顯示。具體需要哪些信息,就需要根據系統管理員的需要來定義了。如只要正確的結果信息,那可以節省閱讀量,但是可能會忽視一些系統的錯誤信息。一般情況下,如果Linux操作系統作為服務器,而這個任務調度又關系到比較重要的任務,如數據備份等等。此時最好需要向系統管理員同時匯報正確的結果信息(如什么時候開始比分,歷時多少時間,備份文件的大小等信息)以及一些錯誤信息(包括用戶自定義與系統默認的錯誤信息)。由于Linux服務器在企業中不會很多,所以即使加上這些錯誤信息或者正常的結果信息,其最終的閱讀量也不會增加多少。而如果在普通的客戶端系統來說,則可以只匯報一些必要的信息,如任務計劃是否正常完成等等。因為客戶端數量比較多,如果反應比較齊全的信息時,系統管理員也沒時間看。可能是直接放進垃圾筒。在這種情況下,還不如只顯示系統管理員比較感興趣的內容為好。
系統管理員除了要確定顯示哪些內容之外,還需要確定以什么樣的方式顯示。如默認情況下,系統會將執行的結果以及錯誤信息,以郵件的形式發送給要求執行的用戶(如果郵件等信息設置無誤的話)。但是系統管理員可以改變這種顯示的方式。如系統管理員可能覺得每次收到一封郵件比較麻煩。如企業有100臺客戶端(在每臺客戶端上通過CRON來對重要文件進行備份),那么系統管理員每天就要收到100封郵件。這不就是變為垃圾郵件了嗎?為此不少系統管理員在客戶端上部署了CRON后,會更改相關的配置。如系統管理員可以將結果信息或者錯誤日志信息保存到本機的一個文件中。如只需要加入program >> /home/user/log.txt即可。注意,此時只是把結果信息保存到這個文件中,而不會將錯誤信息保存。如果在保存正常運行結果信息的同時,還需要保存錯誤信息的話,則系統管理員需要在這個命令后面加入2>&1。這個2>&1表示執行結果與錯誤信息。如果不這么定義的話,則默認情況下只是保存執行結果信息。不過有時候可能系統管理員根本不需要這些信息(雖然筆者不建議這么做,但是有些系統管理員還是對自己有盲目的自信),那么也可以屏幕掉。這個屏蔽的方法,其實筆者在以前的文章中也談到過,就是利用系統中一個特殊的文件/del/null。當需要過濾一些屏幕上的提示信息(如正常的數據流或者錯誤信息),可以將相關的紀錄重定向到這個文件中。為了達到這個目的,筆者采用的語句是program >/dev/null 2>&1。執行這個命令后,就是將所有的信息都重定向到這個/dev/null文件。這是系統中的一個空文件。重定向到這個文件中內容都不會保存。注意,這里必須加上2>&1這個內容。否則的話,只會屏蔽掉部分的內容,仍然會像系統管理員提示一些信息。
筆者最后強調一次,雖然系統中可以使用某些手段將crond任務計劃的執行結果信息或者錯誤信息屏蔽掉,但是筆者一般不建議這么做。因為如果沒有這些信息的話,那么系統管理員就很難判斷這個任務計劃是否順利執行了。如對于完成數據備份功能的計劃作業,可能需要一一去查詢備份文件的屬性才能夠判斷備份作業是否正確運行。這顯然增加了維護的難度。所以,在沒有充分必要的情況下,請務必保留執行結果或者錯誤信息。如果覺得郵件比較麻煩的話,至少可以將這些信息保存到本機的日志文件中。方便在需要的時候查看。
二、刪除任務計劃時慎用crontab –r 命令。
當系統管理員不再需要定期執行任務調度中定義的工作時,則可以通過crontab –r命令來進行刪除。如果在使用這個命令的時候需要慎重。因為可能在同一臺操作系統中設置了不同的任務調度計劃。如一個計劃用來備份數據庫,另外一個計劃用來監測郵件系統所占用的硬盤空間。此時如果系統管理員不需要監測郵件空間的那個任務計劃(可能將郵件服務器移植到另外的服務器上),需要將這個任務計劃刪除。此時如果采用crontab –r命令來刪除不需要的任務計劃時,系統管理員就要后悔了。因為這個命令是刪除所有的任務調度工作,即會將以上的數據庫備份的任務計劃也刪除。但是系統管理員的本意是不想刪除這個計劃的。
為此在使用這個命令刪除任務調度工作時,最好先使用crontal –l命令來查詢當前系統中有哪些任務調度工作。并判斷是否要把這些任務調度工作全部刪除。如果需要全部刪除或者只有要刪除的那一個任務調度作業時,可以使用如上這個命令。否則的話,就不能夠使用這個刪除命令。如果需要刪除單個的任務計劃時,最好通過修改cron配置文件來完成。每一個任務調度工作計劃都會在配置文件中占用一條記錄。系統管理員之需要將對應的紀錄刪除或者注釋掉即可(對于暫時不用的任務調度工作筆者建議注釋掉,而不是刪除)。注釋掉的內容跟刪除具有同等的效果,因為系統在執行時不會去考慮注釋的內容。
另外系統管理員root這個特權用戶可以用來管理所有用戶的任務調度工作。如現在系統管理員是利用mail這個賬戶來管理郵件服務器,并利用這個賬戶建立了上面這個任務調度作業。此時系統管理員可以使用crontab –l –u mail 來查詢mail用戶所創建的所有任務調度工作。同理,也可以通過命令crontab –r –u mail來刪除所有這個用戶創建的任務調度作業。如果現在需要把這個mail賬戶注銷掉,那么可以使用這個刪除命令來一次性將這個賬戶對應的任務調度計劃刪除。如果mail、oracle等賬戶的持有人與root實際為同一人,即系統管理員同時擔任多個角色的話,那么筆者建議采用root賬戶來統一管理這個任務調度計劃。如果不是如此,即企業中有數據庫管理員等員工來各自完成相關的維護工作,那么最好是各個用戶采用自己的賬戶來維護。因為除非是系統管理員(特權賬戶),否則的話各個賬戶只能夠維護自己的任務調度計劃。這就可以給各個用戶一個相對獨立的環境,避免相互之間的干擾。
最后需要說明的是,在任務計劃中最好不要寫太過于復雜的語句。如果要實現比較復雜的功能,如將文件備份完成后需要統計備份文件的大小、備份文件的目錄等信息,最好將它們寫在一個腳本文件中。然后讓任務調度計劃運行這個腳本文件。因為在任務調度計劃簡短的代碼中,很難執行復雜的功能。而且以后如需要調整相關功能的話,也只需要調整這個腳本文件即可。而不需要去更改原先的任務調度的代碼。顯然這有利于提高代碼的靈活性。
【編輯推薦】


















