歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux 計劃任務 at cron

計劃任務,即是在約定好的時間執行計劃好的任務,在Linux我們驚顫更使用crond服務來完成次工作,cron服務器可以根據配置文件約定好的時間執行特定的任務。比如說,我們在每天凌晨4點更新一次數據庫,這既是計劃任務。

Linux,實現計劃任務有三種方式:

1 at 指定一個時間執行一次或多次任務,一次性使用

2 cron 根據配置文件的時間表自動執行任務,周期性執行

3 系統級別的任務計劃及其擴展anacron:錯過計劃任務執行時間後盡快按照定義頻率執行一次

下面我們來一個一個講解:

一:at:

#at 08:08

>echo "Hello"

>Ctrl+d(結束)

上面幾行表示在08:08分輸出Hello,但是不會顯示處理出來,因為執行結果會以郵件方式發送給執行用戶。

at -l 或者是 atq 查詢當前正在等待的計劃任務,顯示如下

2 2011-05-21 01:01 a root

1 2011-05-21 08:08 a root

前面的數字表示計劃任務號

at -d 或者是 atrm 刪除計劃任務

atrm 1

atrm 2

也可以進入/var/spoll/at目錄把計劃任務刪除,at的計劃任務都保存在該目錄中。

管理員用戶有使用at的權限,普通用戶是否可以使用at取決於/etc/at.allow和/etc/at.deny文件,兩者都有責取allow。一般默認所有用戶允許。

二:cron服務,周期性的執行某個計劃任務

cron服務由vixie-cron-4.1-76.e15軟件包提供,我們可以使用 rpm -qa(查詢所有安裝的軟件包)| grep cron 查詢該軟件包是否安裝,安裝完啟動cron服務。

cron依靠crontab文件保存用戶定義的任務計劃

crontab文件分為兩類:分別是系統crontab和用戶crontab

系統crontab: 定義在/etc/crontab

用戶crontab:定義在/var/spool/cron/USERNAME

我們定義cron任務都是編寫crontab文件完成,下面看一下crontab文件內的格式:

每一行的前五段是時間,第六段是命令

MIN HOUR DAY MONTH WEEK COMMAND

時間的取值范圍:

MIN:0-59 HOUR:0-23 DAY:1-31 MONTH:1-12 WEEK:0-7(0和7都表示周日)

介紹下文件內符號的用法:

*:對應時間域上的所有有效取值

- : 對應時間域上的連續時間取值 8-18 表示第8到18

, : 對應時間域上的離散時間取值 8,18 表示第8 和第18

*/: 對應時間域上的沒多久一次進行取值 例如:*/8 每8min/hour/...一次

通過例子了解一下:

30 17 * * * /sbin/shutdown -h now 每天的5點30分關機

03 02 * * 3,6 /usr/bin/yum clean all 每周3周6的凌晨2點3分清空yum緩存

00 */6 * * * /usr/bin/updatedb 每六小時更新一次數據庫

* */6 * * * /usr/bin/updatedb 則表示每第6個小時的每分鐘都更新一次

定義自己的crontab:

# crontab -e 編輯當前用戶的cron表

# crontab -l 列出當前用戶的cron表

# crontab -r 刪除當前用戶的cron進程

# cron -u USERNAME 管理員權限幫別人定義 crontab -u USERNAME [-l | -r | -e]

當然,我們也可以不打開文件添加內容到crontab中:

echo '10 1 * * 7 tar -jcf /backup/data-`date '+%F'`.tar.bz2 /data' >> /var/spool/cron/USERNAME

echo '10 1 * * 7 tar -jcf /backup/data-`date '+%F'`.tar.bz2 /data' | crontab

系統crom:

/etc/crontab裡面的格式:

SHELL=/bin/bash 定義運行計劃任務的解釋器

PATH=/sbin:/bin:/usr/sbin:/usr/bin 執行命令的環境變量

MAILTO=root 計劃任務的發出者

HOME=/ 家目錄

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

run-parts 表示將指定目錄中的腳本順序執行一次

anacron:

anacrontab文件是系統計劃任務的擴展文件:在一個指定時間間隔錯過後自動執行任務。也就是說如果定義事件計算機關閉了,開機會它會盡快按定義頻率執行一次。

定義文件 /etc/anacrontab

每一段的含義:

過去多長時間未執行(天) 啟動延遲(開機後多久執行) 說明信息 把文件中的腳本執行一遍

1 65 cron.daily run-parts /etc/cron.daily

7 70 cron.weekly run-parts /etc/cron.weekly

30 75 cron.monthly run-parts /etc/cron.monthly

第一行的意思是:每天開機65分鐘後檢查/etc/cron.daily中的腳本是否被執行了,如果今天沒有被執行就執行它

第二行的意思是:每隔7天開機後17分後檢查/etc/cron.weekly中的腳本是否被執行,如果一周內都沒有執行,便執行它

第三行也是一樣~

需要知道,在/etc/crontab與/etc/anacrontab文件中定義的目錄內,腳本前的數字越小,越先執行。

用戶使用cron的權限在下面兩個文件中定義:

/etc/cron.allow

/etc/cron.deny

如果兩文件都不存在 只有管理員能夠使用cron

一般我們系統只有deny文件 只定義拒絕使用cron的用戶

如果兩個文件中存在同一用戶,則allow優先,用戶可以使用cron

(被拒絕用戶不可以使用crontab,但還可以使用at定義計劃任務)
 

Copyright © Linux教程網 All Rights Reserved