Related Posts Plugin for WordPress, Blogger...

前言

最近工作關係開始玩 CentOS 了,本次實作環境中採用的是 CentOS 7.3 x86-64 (Kernel version 3.10.0-514.el7.x86_64) 映像檔,也就是新版 CentOS 7.3 最小化安裝版本 (Minimal Install),那麼開始來玩玩吧。💪



實作環境





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 / 7 開始系統排程服務「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 則是當系統時間到達排程時間時才會執行排程動作,比較適合用於伺服器這種「長時間開機型」的主機使用,由於我們要透過 CentOS 主機建置高可用性服務,屆時主機是處於長時間開機的情況,因此下列操作為將 anacron 套件從系統中移除,並且安裝舊有的 crontab 排程機制及相關設定檔,而安裝完成後您可以查看「/etc/cron.d/dailyjobs」排程檔案,事實上此排程檔案的內容與舊版中 /etc/crontab 檔案內容相同。

值得注意的是,在 CentOS 7 當中不管是 Anacron 或 Crontab 排程服務都是由 crond 系統服務負責,但是在剛才移除 Anacron 服務時會造成 crond 系統服務停止,所以請重新啟動 crond 系統服務即可。
# yum -y remove cronie-anacron     //移除 anacron 及相關套件
# yum -y install cronie-noanacron  //安裝 crontab 及相關套件
# rpm -ql cronie-noanacron         //查詢安裝 crontab 套件的相關檔案
/etc/cron.d/dailyjobs  
# systemctl restart crond          //重新啟動 crond 服務
# systemctl status crond           //確認 crond 服務運作狀態
crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2017-05-31 17:09:30 CST; 4s ago
 Main PID: 32472 (crond)
   CGroup: /system.slice/crond.service
           └─32472 /usr/sbin/crond -n

May 31 17:09:30 centos73.weithenn.org systemd[1]: Started Command Scheduler.
May 31 17:09:30 centos73.weithenn.org systemd[1]: Starting Command Scheduler...
May 31 17:09:30 centos73.weithenn.org crond[32472]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 66% if used.)
May 31 17:09:31 centos73.weithenn.org crond[32472]: (CRON) INFO (running with inotify support)
May 31 17:09:31 centos73.weithenn.org crond[32472]: (CRON) INFO (@reboot jobs will be run at computer's startup.)


最後,請記得不管採用的是 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」 範例設定檔內容。在 LogWatch 中「Service All」所有服務項目有哪些呢? 請參考「/usr/share/logwatch/scripts/services」路徑內容,便會條列 LogWatch 所支援的服務項目 (目前共支援 106 項服務):
# yum -y install logwatch               //安裝 logwatch 套件
# cat /etc/logwatch/conf/logwatch.conf  //查看 logwatch 設定檔內容
MailFrom = centos73                     //郵件寄件者顯示資訊
MailTo = weithenn@weithenn.org          //郵件位址
Detail = High                           //分析資訊等級
Service = All                           //收集所有服務運作項目
Service = -yum                          //除了 yum 以外
Format = html                           //格式為 HTML (預設為 Text)


確認 Postfix 運作狀態正常後,便可以執行「/etc/cron.daily/0logwatch」指令來測試每日排程執行時,LogWatch 套件收集主機資訊的郵件是否能順利寄出,而您是否也可以從設定的 E-Mail 地址收到主機所發出的收集資訊郵件,由下列郵件記錄檔內容可以看到 CentOS 主機順利將郵件發送至 logwatch 設定檔中所設定的E-Mail 地址,若您想要查看系統是否有郵件佇列(Mail Queue) 或想刪除所有郵件佇列的郵件,您可以使用「postqueue」指令配合參數「-p、-f」即可。
# /etc/cron.daily/0logwatch  //馬上寄送收集主機資訊郵件
# tail /var/log/maillog      //查看郵件記錄檔
May 31 17:28:12 centos73 postfix/pickup[32553]: CABFC2005097: uid=0 from=
May 31 17:28:12 centos73 postfix/cleanup[32634]: CABFC2005097: message-id=<20170531092812 .cabfc2005097="" centos73.weithenn.org="">
May 31 17:28:12 centos73 postfix/qmgr[663]: CABFC2005097: from=, size=5469, nrcpt=1 (queue active)
May 31 17:28:12 centos73 postfix/smtp[32636]: connect to ASPMX.L.GOOGLE.COM[2404:6800:4008:c04::1b]:25: Network is unreachable
May 31 17:28:14 centos73 postfix/smtp[32636]: CABFC2005097: to=, relay=ASPMX.L.GOOGLE.COM[64.233.187.26]:25, delay=1.8, delays=0.06/0.01/0.36/1.4, dsn=2.0.0, status=sent (250 2.0.0 OK 1496222994 91si46967451plb.204 - gsmtp)
May 31 17:28:14 centos73 postfix/qmgr[663]: CABFC2005097: removed
# postqueue -p            //顯示 Mail Queue
# postqueue -f            //刪除所有 Mail Queue 信件


文章標籤: ,