歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux基礎知識 >> Linux計劃任務

Linux計劃任務

日期:2017/3/2 17:14:09   编辑:Linux基礎知識

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”是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對於不指定的字段,要用“*”來填補其位置。

Copyright © Linux教程網 All Rights Reserved