使用crond 在linux中定時執行任務
定期運作程式或者腳本是管理者要面臨一個很普遍的問題
一、 使用crond監控程式運作程式 1. 使用cron來定期執行任務 使用crond (cron監控程式)來定期運作一些任務,比如備份日志、資料庫、把日志發送到自己郵箱等等操作都可以又定期運作程式來完成。 crond是個腳本,每次Linux啟動的時候都自動起到該腳本,該腳本是 /etc/rc.d/init.d 下面的,每次系統啟動的時候就自動會啟動該目錄下的腳本。
cron有兩個配置檔案,一個/etc/crontab,是一個全局配置檔案,一組是crontab指令生成生成的配置檔案,是屬于使用者級的。
一般對管理者來說,隻要使用全局配置的/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
我們稍微來分析一下這個檔案:
/* 設定基于什麼shell來運作,我們這裡是基于bash shell */ SHELL=/bin/bash /* 指定目錄中有次檔案的指令時,不需要完整目錄路經 */ PATH=/sbin:/bin:/usr/sbin:/usr/bin /* 使用cron實際工作時,見通過郵件來同志root使用者 */ MAILTO=root /* 與/etc/crontab配置檔案相關的主目錄為根目錄 */ HOME=/ /* 好了,這裡是關鍵是,下面的是要指定什麼時間運作什麼目錄下的任務,run-parts指令是運作指定目錄下的每個腳本 */ # run-parts /*
這一句是在每天每小時過後一分鐘運作/etc/cron.hourly目錄中的每個腳本檔案 */ 01 * * * * root run-parts /etc/cron.hourly /*
在每天淩晨4點2分運作/etc/cron.daily目錄中的每個腳本檔案 */ 02 4 * * * root run-parts /etc/cron.daily /*
在每個星期天淩晨4點22分運作/etc/cron.weekly目錄中的每個腳本檔案 */ 22 4 * * 0 root run-parts /etc/cron.weekly /*
在每個月的第一天淩晨4點42分運作/etc/cron.monthly目錄中的每個腳本檔案 */ 42 4 1 * * root run-parts /etc/cron.monthly
大家看到裡面的"*"一定覺得很奇怪,下面我們句稍微來了解一下cron的文法: 上面腳本中的時間是從左到右的,分别列出了五個字段,我們看下面的表: ------------------------------------------------ 字段 取值範圍 ------------------------------------------------ Minute 0 ~ 59 Hour 0 ~ 23,其中0是午夜,20是晚上8點 Day 1 ~ 31 Month 1 ~ 12 Day of week 0 ~ 7,其中0和7是表示星期天 ------------------------------------------------ 任何字段中的星号是通配符,例如,如果第一個字段包括星号,則特定若無其事在可能的每一分鐘運作。如果要指定時間範圍,比如上午8點到 下午4點,則可以見第二個字段設定為8~16。如果要隔一天運作任務,則可以将第三個字段設定為*/2。可以看出,如果五個字段(minute、hour 、day、month、day of week) 之後,cron中的每個字段就沒什麼神秘之處了。
2. 使用者自己的cron 使用者也可以計劃使用者自己的cron任務,比如他想要在半夜整理他的檔案,然後發送郵件給自己,隻要這個使用者他沒有在/etc/cron.deny表中, 就可以使用crontab -e指令來啟動自己的cron檔案。 3. 對cron的通路控制 預設情況下,所有使用者都能通路cron工具,要對cron進行通路控制,則可以生成/etc/cron.allow與/etc/cron.deny檔案。 (1)這兩個檔案都不存在時,每個使用者都可以通路cron工具] (2)存在/etc/cron.allow檔案時,則隻有cron.allow檔案中允許的使用者才能通路cron工具,如果也有/etc/cron.deny檔案,則忽略cron.deny文 件
二、 使用at指令定期運作程式 1. 使用cron運作任務 cron任務的缺點是計劃要經常運作,假如我們隻是想要讓特定任務運作一次呢?那麼,這時候就要用到at監控程式了。 設定at指令很簡單,訓示定運作的時間,那麼就會在哪個時候運作。at類似列印程序,會把任務放到/var/spool/at目錄中,到指定時間運作它 。at指令相當于另一個shell,運作at time指令時,它發送一個個指令,可以輸入任意指令或者程式。at now + time指令可以在訓示任務。 假設處理一個大型資料庫,要在别人不用系統時去處理資料,比如淩晨2點5分。那麼我們就應該先建立/home/mj/airplane腳本管理資料庫,計 劃處理/home/mj/air-safe檔案中的結果。正常方式是這樣啟動下列指令: # at 2:05 tomorrow at> /home/mj/airplane > /home/mj/air-safe at> Ctrl+D AT Time中的時間表示方法 ----------------------------------------------------------------------- 時間 例子 說明 ----------------------------------------------------------------------- Minute at now + 5 minutes 任務在5分鐘後運作 Hour at now + 1 hour 任務在1小時後運作 Days at now + 3 days 任務在3天後運作 Weeks at now + 2 weeks 任務在兩周後運作 Fixed at midnight 任務在午夜運作 Fixed at 10:30pm 任務在晚上10點3