︿
Top

前言

最近工作關係開始又要回味 CentOS 了,在本次實作環境中採用的是 CentOS-6.8-x86_64-minimal.iso 映像檔,也就是 CentOS 6.8 最小化安裝版本 (Minimal Install)。為何不用最新的 CentOS 6.9 版本? 因為,最新的 LIS 4.1.3-2 僅支援至 CentOS 6.8,所以便以 CentOS 6.8 版本開始回味起了,那麼開始來玩玩吧。💪



實作環境




Anacron 排程服務

當 CentOS 主機安裝設定完畢並上線運作之後,我們希望主機能夠在固定時間(例如 每小時、每天、每週、每月)發送相關資訊至主機管理人員 E-Mail 位址,讓主機管理人員能獲取系統上的服務運作狀態和硬體使用狀況等相關資訊。主機的管理人員只要定期查看每台管理主機的資訊郵件內容,即可進行判斷及適當的處理,或轉交給相對應的人員接手。

CentOS 主機的預設排程為每小時的 01 分、每天凌晨 4 點 02 分、每週日凌晨 4 點 22 分,以及每月 1 號凌晨 4 點 22 分。此時,系統會執行預先撰寫好的自動維護 Shell Script 執行檔,進行系統相關的清理及備份工作,並使用預設的 Postfix 郵件轉送代理 MTA(Mail Transfer Agnet) 寄送資訊郵件(CentOS 5.x 預設為使用 Sendmail)。欲使用別的郵件轉送代理像是 Sendmail、Qmail …等,屆時只要在設定檔內進行指定即可。若讀者有興趣了解系統定期執行的詳細內容,可切換至 /etc 目錄下的四個資料夾,分別是 每小時(cron.hourly)、每天(cron.daily)、每週(cron.weekly)、每月(cron.monthly),每個資料夾內都有相關的自動維護 Shell Script ,查看後即可了解系統維護主機的相關內容。

CentOS 6 開始系統排程服務「crontab」的設定檔「/etc/crontab」內容中已經沒有排程工作的相關內容了,改為由 「anacron」 取代成為預設系統排程服務,您可以查看 「/etc/anacrontab」 設定檔內容得知排程作業內容(CentOS 5.x 時預設的系統排程服務為 crontab)。

Anacron 排程服務它適合運作於測試機或筆記型電腦上這種 「非長期處於開機狀態」 之用,因為它採用的是 「頻率」 的方式來執行排程工作,以 /etc/cron.daily 執行的方式來說為 「1天」 執行一次,當 CentOS 主機開機後若發現今天尚未執行排程工作便會在 「5分鐘」 之後執行 /etc/cron.daily 目錄下的執行檔案,當執行排程工作完成後會在 「/var/spool/anacron/cron.daily」 檔案中把今天的日期寫入。(只有 root 管理權限能修改此檔)

  • cron.daily: 執行一次,未執行過排程則開機 5 分鐘後執行。
  • cron.weekly:7天 執行一次,未執行過排程則開機 25 分鐘後執行。
  • cron.monthly: 執行一次,未執行過排程則開機 45 分鐘後執行。

查看 Anacron 排程服務 (/etc/anacrontab) 組態設定檔內容:
# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
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


而 crontab 則是當系統時間到達排程時間時才會執行排程動作,比較適合用於伺服器這種「長時間開機型」的主機使用,由於我們要架設高可用性服務,屆時主機是處於長時間開機的情況,因此下列操作為將 anacron 套件從系統中移除,並且安裝舊有的 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  
# chkconfig crond --list           //確定主機啟動時會帶起 crond 服務
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off


最後,請記得不管採用的是 anacron 或 crontab 系統排程服務,當修改 anacron 設定(/etc/anacrontab) 或 crontab 設定(/etc/crontab) 之後都不需要把 crond 服務重新啟動,因為 crond 程序會在 「每分鐘」 自動監控 /etc/cron.d 及 /var/spool/cron 資料夾變化,若有偵測到內容變化會自動將變化載入記憶體中,所以不需要修改後把 crond 服務重新啟動。



安裝 LogWatch 套件

在 CentOS 系統中我們可以套過 YUM 套件管理工具安裝 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 = centos68                     //郵件寄件者顯示資訊
MailTo = weithenn@weithenn.org          //郵件位址
Detail = High                           //分析資訊等級
Service = All                           //收集所有服務運作項目
Service = -yum                          //除了 yum 以外


接著修改 CentOS 6 預設的 MTA 也就是 Postfix 設定檔內容,因為 Postfix 預設會採用 IPv4 及 IPv6 進行相關郵件遞送作業,但是後續操作中我們會將 CentOS 6 的 IPv6 網路功能關閉以節省主機資源(事實上,目前大部份的企業也很少使用到 IPv6 網路功能),但如此一來 Postfix 服務執行時會因為偵測不到 IPv6 網路功能而產生錯誤訊息,因此我們修改 Postfix 設定檔將預設值採用 IPv4/IPv6 改為僅使用 IPv4 網路功能即可,修改後記得重新載入 Postfix 服務以套用變更。
# vi /etc/postfix/main.cf   //編輯 Postfix 設定檔
inet_protocols = all        //預設值,採用 IPv4 及 IPv6
inet_protocols = ipv4       //修改後,僅使用 IPv4
# service postfix reload    //重新載入 Postfix 服務
Reloading postfix:                  [  OK  ]


完成 Postfix 修改及重新載入服務後,便可以使用「logwatch」指令來測試收集主機資訊的郵件是否能順利發出,而您是否也可以從設定的 E-Mail 地址收到主機所發出的收集資訊郵件,由下列郵件記錄檔內容可以看到 CentOS 主機順利將郵件發送至 logwatch 設定檔中所設定的E-Mail 地址,若您想要查看系統是否有郵件佇列(Mail Queue) 或想刪除所有郵件佇列的郵件,您可以使用「postqueue」指令配合參數「-p、-f」即可。
# logwatch                //馬上寄送收集主機資訊郵件
# tail /var/log/maillog   //查看郵件記錄檔
May 15 10:49:35 centos68 postfix/qmgr[4820]: 30D9028: from=<root@centos68.weithenn.org>, size=1608, nrcpt=1 (queue active)
May 15 10:49:36 centos68 postfix/smtp[5059]: 30D9028: to=<weithenn@weithenn.org>, relay=ASPMX.L.GOOGLE.COM[74.125.203.27]:25, delay=2, delays=0.38/0.02/0.76/0.89, dsn=2.0.0, status=sent (250 2.0.0 OK 1494816666 g25si9530625pgn.0 - gsmtp)
May 15 10:49:36 centos68 postfix/qmgr[4820]: 30D9028: removed
# postqueue -p            //顯示 Mail Queue
# postqueue -f            //刪除所有 Mail Queue 信件




CentOS 6.8 基礎設定系列文章