計劃任務,即是在約定好的時間執行計劃好的任務,在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定義計劃任務)