iT邦幫忙

DAY 12
6

邁向 RHCE 之路系列 第 12

邁向 RHCE 之路 (Day12) - 排程 (at、crontab、anacron)

  • 分享至 

  • xImage
  •  

以下將介紹三種常用於 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 之路系列文章連結


上一篇
邁向 RHCE 之路 (Day11) - 執行序 (Process)
下一篇
邁向 RHCE 之路 (Day13) - YUM 套件管理工具
系列文
邁向 RHCE 之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
chiounan
iT邦研究生 1 級 ‧ 2011-10-19 09:50:01

讚超有收穫的筆記

我要留言

立即登入留言