Linux計劃任務
Linux的計劃任務是系統管理方面的一個重要內容,是系統自動完成工作的一種實現方式,正因為有了計劃任務,我們才可以完全實現系統管理的腳本化和自動化。
關於計劃任務,Linux根據用戶需要提供了兩種服務,一種是atd服務,另一種是cron服務
1.atd服務
如果你的計劃任務只要執行一次,那麼就請你使atd服務。在默認情況下,Linux系統是開啟了atd這個服務的。如果不確認你的Linux是否開啟了atd服務,請使用下面這個命令查看:
# /etc/init.d/atd status
atd (pid 3016)正在運行...
從上面可以看出atd服務是啟動的。如果你的atd服務沒有啟動可以使用
# /etc/init.d/atdstart
來啟動你的atd服務。
atd服務中我們經常要使用到的是at命令,與at命令相關的有/etc/at.deny和/etc/at.allow兩個文件用來過濾哪些用戶可以使用at命令。Linux預設情況下,只有/etc/at.deny這個文件,且這個文件內容為空,由於內容沒有任何使用者,所以所有人都可以使用at命令。如果不想要某個使用者使用at時,那麼將該使用者登錄用戶名寫到/etc/at.deny這個文件中即可。
Linux系統中還可以自行創建/etc/at.allow文件,使得寫在這個文件中的使用者才能使用at,沒有在這個文件中的使用者則不能使用at (即使沒有寫在at.deny當中)。如果這兩個文件都不存在,那麼只有root可以使用at命令。
下面來看一下如何使用at命令:
at [-m] TIME;//下達計劃任務,之後會出現編輯窗口,寫入要執行的命令
-m:執行at計劃任務時,將屏幕輸出結果mail給下達指令的使用者。
TIME的格式具體請參照我下面的列子吧。
# at 04:002011-09-20//在2011年9月20號上午四點執行命令。
# at 11pm//今天晚上11點執行,如果已經過了,等到明天晚上
# at 08am + 3weeks //三周後的上午八點執行
此外還有兩個常用命令:
atq;//查看計劃任務
atrm;//刪除計劃任務
2.crond服務
2.1 crond服務簡介
linux任務調度的工作主要分為以下兩類:
*系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存
*個人執行的工作:某個用戶定期要做的工作,例如每隔10分鐘檢查郵件服務器是否有新信,這些工作可由每個用戶自行設置。
這個時候可以用cron來幫助系統進行任務調度。cron可以根據時間、日期、月份、星期的組合來調度對重復任務的執行的守護進程。
crond服務通過shell和Linux/Unix下的crontab(計劃任務控制)的方式實現。cron是計劃任務的稱呼,crond是後台進程,而crontab則是定制好的計劃任務表。cron這個名字來自“chronos”,一個古希臘語“時間”的意思。crond進程每分種會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
要使用crond服務,你必須安裝了vixie-cron RPM軟件包,而且必須在運行crond服務。要判定該軟件包是否已安裝,使用rpm -qvixie-cron命令。要判定該服務是否在運行,使用/sbin/service crond status命令。
crond服務是linux的內置服務,但它不會開機自動啟動。可以用以下命令啟動和停止服務:
/sbin/service crond start//啟動服務
/sbin/service crondstop //關閉服務
/sbin/service crondrestart //重啟服務
/sbin/service crondreload //重新載入配置
你也可以讓這個服務在系統啟動的時候自動啟動,只需要在/etc/rc.d/rc.local這個腳本的末尾加上:
/sbin/service crondstart
2.2 crond服務的使用
crond服務提供crontab命令來設定crond服務,以下是這個命令的一些參數與說明:
crontab -u//設定某個用戶的cron服務,一般這個參數只允許root使用
crontab -l//列出某個用戶cron服務的詳細內容
crontab -r //刪除某個用戶的cron服務
注意:如果有多條計劃任務crontab-r會刪除用戶所有的計劃,如果你只想刪除其中一條計劃任務,請使用crontab -e命令或者直接編輯/var/spool/cron/root文件。
crontab -e//編輯某個用戶的cron服務
現舉例說明:
# crontab -u root–l//root查看自己的cron設置
# crontab -u fred–r//root想刪除fred的cron設置
# crontab -u root–e//編輯root的crontab文件
crontab -e命令編輯的是/var/spool/cron下對應用戶的cron文件
我們也可以直接修改/etc/crontab文件,crontab文件有自己的格式,具體如下:
Minute Hour Day Month Dayofweek command
分鐘小時天月天每星期命令
每個字段代表的含義如下:
Minute每個小時的第幾分鐘執行該任務
Hour每天的第幾個小時執行該任務
Day每月的第幾天執行該任務
Month每年的第幾個月執行該任務
DayOfWeek每周的第幾天執行該任務
Command指定要執行的程序
舉例如下:
5 * * * * ls//指定每小時的第5分鐘執行一次ls命令
30 5 * * * ls//指定每天的5:30執行ls命令
30 7 8 * * ls//指定每月8號的7:30分執行ls命令
30 5 8 6 * ls//指定每年的6月8日5:30執行ls命令
30 6 * * 0 ls//指定每星期日的6:30執行ls命令
注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等
30 3 10,20 * * ls//每月10號及20號的3:30執行ls命令
注:“,”用來連接多個不連續的時段
258-11 ***ls//每天8-11點的第25分鐘執行ls命令
注:“-”用來連接連續的時段
*/15 * * * * ls//每15分鐘執行一次ls命令(即每個小時的第0 15 30 45 60分鐘執行ls命令)
30 6 */10 * * ls//每個月中,每隔10天6:30執行一次ls命令(即每月的1、11、21、31日是的6:30執行一次ls命令)
50 7 * * * rootrun-parts /etc/cron.daily//每天7:50以root身份執行/etc/cron.daily目錄中的所有可執行腳本
注:run-parts參數表示,執行後面目錄中的所有可執行文件,如果去掉這個參數的話,後面就可以寫要運行的某個腳本名,而不是文件夾名了
30 5 * * * ls</jp/test 2<&1//每天5:30執行ls命令,並把結果輸出到/jp/test文件中
注:2<&1表示執行結果及錯誤信息
記住幾個特殊符號的含義:
"*"代表取值范圍內的數字,
"/"代表"每",
"-"代表從某個數字到某個數字,
","分開幾個離散的數字
在這些字段裡,除了“Command”是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對於不指定的字段,要用“*”來填補其位置。