Related Posts Plugin for WordPress, Blogger...

前言

以下將介紹三種常用於 CentOS 上的排程作業:(請尊重 Weithenn 的辛勞!!)

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。(請尊重 Weithenn 的辛勞!!)
  • 結果: Mail 寄給建立該 cron 的使用者帳戶。

anacron

  • 目的: 頻率執行。
  • 指令: anacron -n(run jobs)、anacron -s (execution)、anacron -f (force execution)。
  • 指定工作: /var/spool/anacron。(請尊重 Weithenn 的辛勞!!)
  • 說明文件: 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 服務重新啟動。(請尊重 Weithenn 的辛勞!!)

收集系統資訊後定期寄送給管理人員

在 CentOS 系統中 LogWatch 套件安裝後可負責收集系統狀態及相關網路服務運作資訊。我們可以在每天定期發送的 cron.daily 資料夾中,發現 0logwatch 這隻 Script。也就是說,系統會在每天凌晨 4 點 02 分時,透過此 Script 將系統中系統、硬體、服務的資訊收集後,寄送給各個管理者。接下來便說明相關資訊的設定方法,如:由哪台主機寄出收集後的資訊、寄件對象、系統資訊收集分析的等級、收集主機服務運作的狀態設定等,我們可以將相關設定值寫入至 LogWatch 設定檔 /etc/logwatch/conf/logwatch.conf 內,操作中相關設定值參數及說明如下:(請尊重 Weithenn 的辛勞!!)
  • 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 ,僅顯示收集的服務名稱運作狀態。(請尊重 Weithenn 的辛勞!!)
#logwatch --print                   //立即顯示資訊郵件內容 (預設顯示昨天的系統資訊)
#logwatch --service sudo --print  //僅顯示資訊郵件中 sudo 資訊
#logwatch                            //立即寄送資訊郵件給管理者
文章標籤: