以下將介紹三種常用於 CentOS 上的排程作業:
at
目的: 只執行一次
指令: at (edit)、atq (list)、atrm (remove)
指定工作: /var/spool/at/at-*
說明文件: /usr/share/doc/at-*/timespec
結果: 統一寄 Mail 給 root (不管是 root 或一般使用者)
crontab
目的: 定時執行
指令: crontab -e (edit)、crontab -l (list)、crontab -r (remove)、contab -u (change user)
指定工作: /var/spool/cron/[user name]
說明文件: man 5 crontab
結果: Mail 寄給建立該 cron 的使用者帳戶
anacron
目的: 頻率執行
指令: anacron -n(run jobs)、anacron -s (execution)、anacron -f (force execution)
指定工作: /var/spool/anacron
說明文件: man anacron、anacrontab
----- Anacron -----
它適合運作於測試機或筆記型電腦上這種 "非長期處於開機狀態" 之用,因為它採用的是 "頻率" 來執行排程工作,以 /etc/cron.daily 執行的方式為 "1天" 執行一次,當 CentOS 主機開機後若發現今天尚未執行排程工作便會在 "5分鐘" 之後執行 /etc/cron.daily 目錄下的執行檔案,當執行排程工作完成後會在 /var/spool/anacron/cron.daily 檔案中把今天的日期寫入,表示排程執行完畢而此排程的設定檔為 /etc/anacrontab。(只有系統管理者 root 能修改此檔)
cron.daily: 每 天 執行一次,未執行過排程則開機 5 分鐘後執行
cron.weekly: 每 7天 執行一次,未執行過排程則開機 25 分鐘後執行
cron.monthly: 每 月 執行一次,未執行過排程則開機 45 分鐘後執行
#cat /etc/anacrontab
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
RANDOM_DELAY=45
START_HOURS_RANGE=3-22
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
#cat /var/spool/anacron/cron.{dai,week,month}ly
20111017 //cron.daily 最後一次排程執行時間
20111014 //cron.weekly 最後一次排程執行時間
20111007 //cron.monthly 最後一次排程執行時間
----- crontab -----
從 CentOS 6 開始 /etc/crontab 內容已經沒有排程工作的相關內容了,改為由 anacron 取代為預設的系統排程作業 (CentOS 5.x 時預設的系統排程檔案即為 /etc/crontab 內容),若您不想使用 anacron 則請移除 cronie-anacron 套件即可,並且安裝 cronie-noanacron 套件將 crontab 排程設定找回來,安裝後 「/etc/cron.d/dailyjobs」 排程檔案與舊有的 /etc/crontab 內容相同。
#yum -y remove cronie-anacron //移除 anacron 及相關套件
#yum -y install cronie-noanacron //安裝 crontab 及相關套件
#rpm -ql cronie-noanacron //查詢安裝 crontab 套件的相關檔案
/etc/cron.d/dailyjobs
#cat /etc/cron.d/dailyjobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
02 4 * * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily
22 4 * * 0 root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.weekly
42 4 1 * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.monthly
#chkconfig crond --list //確定主機啟動時會帶起 crond 服務
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
最後請記得修改 anacron 設定 (/etc/anacrontab) 或 crontab 設定 (/etc/crontab) 之後都不需要把 crond 服務重新啟動,因為 crond 程序會在 "每分鐘" 自動監控 /etc/cron.d 及 /var/spool/cron 資料夾變化,若有偵測到內容變化會自動將變化載入記憶體中,所以不需要修改後把 crond 服務重新啟動。
----- 收集系統資訊後定期寄送給管理人員 -----
在 CentOS 系統中 LogWatch 套件安裝後可負責收集系統狀態及相關網路服務運作資訊。我們可以在每天定期發送的 cron.daily 資料夾中,發現 0logwatch 這隻 Script。也就是說,系統會在每天凌晨 4 點 02 分時,透過此 Script 將系統中系統、硬體、服務的資訊收集後,寄送給各個管理者。接下來便說明相關資訊的設定方法,如:由哪台主機寄出收集後的資訊、寄件對象、系統資訊收集分析的等級、收集主機服務運作的狀態設定等,我們可以將相關設定值寫入至 LogWatch 設定檔 "/etc/logwatch/conf/logwatch.conf" 內,操作中相關設定值參數及說明如下:
MailFrom:通常填入此台主機的主機名稱 (Hostname),或是該主機所擔任的企業服務名稱(如 Web1)。
MailTo:填入管理者們的郵件信箱 (Email)。若有多筆郵件位址,則使用逗點 (, ) 加上空格進行隔開即可。
Detail:指定收集主機資訊後分析的等級,共有三種等級可供選擇。分別為低級(Low 或數字 0)、中級(Med 或數字 5)、高級(High 或數字 10)。
Service:指定收集主機服務運作的項目,LogWatch 支援收集服務的項目為 /usr/share/logwatch/scripts/services 目錄下的服務名稱,您可以使用參數 All 來表示要收集該主機所有運作的服務。若不想分析某個服務,則可於服務名稱前加上減號 ( - ),則系統便會排除收集該項服務的運作狀態。
下列為筆者的 LogWatch 設定檔設定內容,若您需要更詳細的參數設定內容可參考 "/usr/share/logwatch/default.conf/logwatch.conf" 設定檔內容:
#yum -y install logwatch //安裝 logwatch 套件
#cat /etc/logwatch/conf/logwatch.conf //修改 LogWatch 設定檔
MailFrom = Web //此主機擔任的服務名稱
MailTo = weithenn@weithenn.org //管理者郵件位址
Detail = High //收集主機資訊等級
Service = All //收集主機服務運作項目
Service = -yum //不收集 YUM 服務項目
設定完畢之後,CentOS 主機便會自動於每天凌晨 4 點 02 分時,收集主機資訊後寄送至管理者郵件信箱內。如果您想要立即收到資訊郵件,可以手動執行 logwatch 指令,命令主機立刻收集資訊並寄送郵件,或配合參數 --print 直接顯示收集到的資訊,查看收集到的資訊而不寄送郵件(此資訊和資訊郵件的內容完全相同)。您還可以配合參數 --service ,僅顯示收集的服務名稱運作狀態。
#logwatch --print //立即顯示資訊郵件內容 (預設顯示昨天的系統資訊)
#logwatch --service sudo --print //僅顯示資訊郵件中 sudo 資訊
#logwatch //立即寄送資訊郵件給管理者
(上一篇)邁向 RHCE 之路 (Day11) - 執行序 (Process)
(下一篇)邁向 RHCE 之路 (Day13) - YUM 套件管理工具
邁向 RHCE 之路系列文章連結