Linux的任務計劃
我們在使用系統的過程中,經常需要在以后的某個時間點執行一個任務,而我們又不在機器旁邊的時候,比如在半夜時服務器訪問的用戶很少,寬帶資源很充足的時候,要去鏡像軟件包、重啟服務器(雖然Linux很穩定)等,或者需要服務器在每天的特定時間去備份數據庫或者做其它周期性的任務。
這時就需要任務計劃去滿足我們的需求,在Linux中任務計劃分為一次性任務計劃和周期性任務計劃,只在某個時間點執行一次的任務計劃,比如:下載鏡像、重啟服務器等就用一次性任務計劃。而需要周期性、重復執行的任務就用周期性任務計劃。
一次性任務用at命令,而周期性任務計劃用crontab命令
at命令的用法很簡單,在命令后跟上一個時間點回車后在at>提示符后輸入需要執行的命令,按ctrl+d提交任務即可。
如:在5分鐘后執行一次echo命令
創建任務后如何查看?使用如下命令就可以:
#at -l 或atq
任務創建后想要刪除怎么辦?更簡單,使用-d選項加上要刪除的任務編號即可。如刪除剛剛創建的任務計劃
#at -d #
但這樣一次一條或多條命令輸入時不覺得麻煩嗎?沒關系at很貼心的為你設計了批處理模式,讓你一次可以創建多項任務,在使用時需要先準備一個文件,在文件中寫入要執行的命令。然后通過-f選項去讀取這個文件。比如:在家目錄下用vim編輯一個文件,在文件中寫入要執行的命令,echo “hello”,ls -l /etc/,當然你可以輸入更多的命令。然后保存文件名為at.txt的文件。接著再用at -f ~/at.txt 16:00去執行即可。如下圖
前面提到的時間點有:now、noon(正午)、midnight(午夜)、teatime(pm4:00)、tomorrow,當然你也可以使用精確的時間,如15:00等。
任務計劃執行結果會通過郵件發送給任務提交者,查看郵件時,使用#mail命令,然后輸入相應的郵件編號就可以查看郵件內容。如下圖:
是不是很簡單?那么再接著來看看crontab命令。crontab是用來創建周期性任務計劃的。也就是說那些需要重復執行的任務就需要用到它,那它是如何實現周期性的呢?在系統中有一個叫crond的守護進程。就是因為它的存在,才得以讓我們可以很放心的把這么重要的任務交給它去執行。而cron又分為系統cron和用戶cron。
系統cron在/etc/crontab文件中有其詳細定義,只要我們按照這個格式去創建任務計劃。系統就能很愉快的工作。那么它的格式是什么呢?請看下圖:
有沒有覺得暈?沒關系,其實它已經很明確的告訴你要怎么去創建一個任務計劃了。但這里我們只是去看這里的字段都是一些什么含義,而不建議去直接修改這個文件。具體什么原因你懂的,Linux可不會阻止你自殺的。比如:rm -rf /這個命令你可以很輕松的去執行,但后果可是很嚴重的。下面說說里面字段的含義:
SHELL=/bin/bash:用于解釋執行任務計劃里面的命令的解釋器
PATH=/sbin:/bin:/usr/sbin:/usr/bin:PATH環境變量,shell執行命令時會以這些路徑下去尋找命令的路徑。
MAILTO=root:任務計劃的結果發送給誰。
下面的5個*號從左至右分別代表的是分、時、日、月、周。緊接著的是要執行的命令,在寫命令時建議使用命令的絕對路徑,以免在執行時不能正確解釋執行。
那我們要怎樣去定義一項任務呢?在這之前先說說*號的有效取值范圍以及如何去表示它們:
1.每個時間位都應該使用其可用的有效取值范圍內的值;
2.某時間位上的*號表示對應位的所有有效取值;
3.-:連續的時間點取值,如:30-35 7 * * *
4.,:離散的時間點取值,如:5,35 * * * *
5./#:表示在指定范圍時間內每隔#一次,如:5-45/3 * * * *
在此文件中每一行表示一個獨立的任務。
用戶cron是普通用戶和管理員(強烈建議用此種方式創建任務計劃)以安全的方式創建任務計劃的,因為在保存退出后,crontab命令會檢查命令是否有語法錯誤。創建成功后會在/var/spool/cron/目錄下創建一個同用戶名的文件。而crontab的用法也很簡單,在命令后跟上-e 選項就可以創建任務計劃。
例:每周2、4、6的凌晨3點02分把/etc目錄下的文件備份至/backup目錄下并以etc_開頭后面跟上當天的日期。而后保存即可(友情提示:在命令中使用%時,要記得轉義,或者用引號。)。如下圖:
查看自己的cron任務列表,使用-l選項。如下圖就是剛剛創建的任務計劃。
那么要刪除任務計劃怎么辦?對此我們直接用crontab -e去編輯/var/spool/cron/目錄下的文件。如果連這個文件都不想要了?那好辦,執行crontab -e后這個文件就被刪除,從此一切煩惱就隨往事煙消云散了。
當然身為管理員無時無刻不體現著特權,使用-u選項還可以別的用戶創建任務計劃。請看下圖
上圖創建了一個每天6、9、12、15、18點查看當前系統掛載的所有文件系統,并將結果追加至/tmp/mounts.txt文件中的任務。
-u選項還可以配合-l、-r選項實現查看和移除任務計劃。
如果我們創建的任務計劃在某天不能正常的執行,比如系統宕機、重啟等,別擔心還有一個小工具:anacron。
anacron是cron的補充,它的主要功能就是去檢查crontab中的任務在過去的一個周期內是否有成功執行。如果沒有執行,則在開機以后在系統的某個時間點內讓其執行一次,無論周期是否到達。
anacron很完美的解決了我們的憂慮。
原創文章,作者:人字拖,如若轉載,請注明出處:http://www.www58058.com/71377