## 15.1 什么是例行性工作調度
每個人或多或少都有一些約會或者是工作,有的工作是例行性的, 例如每年一次的加薪、每個月一次的工作報告、每周一次的午餐會報、每天需要的打卡等等; 有的工作則是臨時發生的,例如剛好總公司有高官來訪,需要你準備演講器材等等! 用在生活上面,例如每年的愛人的生日、每天的起床時間等等、還有突發性的 3C 用品大降價 (啊!真希望天天都有!) 等等啰。
像上面這些例行性工作,通常你得要記錄在行事歷上面才能避免忘記!不過,由于我們常常在計算機前面的緣故, 如果計算機系統能夠主動的通知我們的話,那么不就輕松多了!嘿嘿!這個時候 Linux 的例行性工作調度就可以派上場了! 在不考慮硬件與我們服務器的鏈接狀態下,我們的 Linux 可以幫你提醒很多任務,例如:每一天早上 8:00 鐘要服務器連接上音響,并啟動音樂來喚你起床;而中午 12:00 希望 Linux 可以發一封信到你的郵件信箱,提醒你可以去吃午餐了; 另外,在每年的你愛人生日的前一天,先發封信提醒你,以免忘記這么重要的一天。
那么 Linux 的例行性工作是如何進行調度的呢?所謂的調度就是將這些工作安排執行的流程之意! 咱們的 Linux 調度就是通過 crontab 與 at 這兩個東西!這兩個玩意兒有啥異同?就讓我們來瞧瞧先!
### 15.1.1 Linux 工作調度的種類: at, cron
從上面的說明當中,我們可以很清楚的發現兩種工作調度的方式:
* 一種是例行性的,就是每隔一定的周期要來辦的事項;
* 一種是突發性的,就是這次做完以后就沒有的那一種 ( 3C 大降價...)
那么在 Linux 下面如何達到這兩個功能呢?那就得使用 at 與 crontab 這兩個好東西啰!
* at :at 是個可以處理僅執行一次就結束調度的指令,不過要執行 at 時, 必須要有 atd 這個[服務 (第十七章)](../Text/index.html) 的支持才行。在某些新版的 distributions 中,atd 可能默認并沒有啟動,那么 at 這個指令就會失效呢!不過我們的 CentOS 默認是啟動的!
* crontab :crontab 這個指令所設置的工作將會循環的一直進行下去! 可循環的時間為分鐘、小時、每周、每月或每年等。crontab 除了可以使用指令執行外,亦可編輯 /etc/crontab 來支持。 至于讓 crontab 可以生效的服務則是 crond 這個服務喔!
下面我們先來談一談 Linux 的系統到底在做什么事情,怎么有若干多的工作調度在進行呢?然后再回來談一談 at 與 crontab 這兩個好東西!
### 15.1.2 CentOS Linux 系統上常見的例行性工作
如果你曾經使用過 Linux 一陣子了,那么你大概會發現到 Linux 會主動的幫我們進行一些工作呢! 比方說自動的進行線上更新 (on-line update)、自動的進行 updatedb ([第六章談到的 locate 指令](../Text/index.html#locate)) 更新文件名數據庫、自動的作登錄文件分析 (所以 root 常常會收到標題為 logwatch 的信件) 等等。這是由于系統要正常運行的話, 某些在背景下面的工作必須要定時進行的緣故。基本上 Linux 系統常見的例行性任務有:
* 進行登錄文件的輪替 (log rotate):
Linux 會主動的將系統所發生的各種信息都記錄下來,這就是[登錄文件 (第十八章)](../Text/index.html)。 由于系統會一直記錄登錄信息,所以登錄文件將會越來越大!我們知道大型文件不但占容量還會造成讀寫性能的困擾, 因此適時的將登錄文件數據挪一挪,讓舊的數據與新的數據分別存放,則比較可以有效的記錄登錄信息。這就是 log rotate 的任務!這也是系統必要的例行任務;
* 登錄文件分析 logwatch 的任務:
如果系統發生了軟件問題、硬件錯誤、資安問題等,絕大部分的錯誤信息都會被記錄到登錄文件中, 因此系統管理員的重要任務之一就是分析登錄文件。但你不可能手動通過 vim 等軟件去檢視登錄文件,因為數據太復雜了! 我們的 CentOS 提供了一只程序“ logwatch ”來主動分析登錄信息,所以你會發現,你的 root 老是會收到標題為 logwatch 的信件,那是正常的!你最好也能夠看看該信件的內容喔!
* 創建 locate 的數據庫:
在第六章我們談到的 [locate](../Text/index.html#locate) 指令時, 我們知道該指令是通過已經存在的文件名數據庫來進行系統上文件名的查詢。我們的文件名數據庫是放置到 /var/lib/mlocate/ 中。 問題是,這個數據庫怎么會自動更新啊?嘿嘿!這就是系統的例行性工作所產生的效果啦!系統會主動的進行 updatedb 喔!
* man page 查詢數據庫的創建:
與 locate 數據庫類似的,可提供快速查詢的 man page db 也是個數據庫,但如果要使用 man page 數據庫時,就得要執行 mandb 才能夠創建好啊! 而這個 man page 數據庫也是通過系統的例行性工作調度來自動執行的哩!
* RPM 軟件登錄文件的創建:
RPM ([第二十二章](../Text/index.html)) 是一種軟件管理的機制。由于系統可能會常常變更軟件, 包括軟件的新安裝、非經常性更新等,都會造成軟件文件名的差異。為了方便未來追蹤,系統也幫我們將文件名作個排序的記錄呢! 有時候系統也會通過調度來幫忙 RPM 數據庫的重新創建喔!
* 移除暫存盤:
某些軟件在運行中會產生一些暫存盤,但是當這個軟件關閉時,這些暫存盤可能并不會主動的被移除。 有些暫存盤則有時間性,如果超過一段時間后,這個暫存盤就沒有效用了,此時移除這些暫存盤就是一件重要的工作! 否則磁盤容量會被耗光。系統通過例行性工作調度執行名為 tmpwatch 的指令來刪除這些暫存盤呢!
* 與網絡服務有關的分析行為:
如果你有安裝類似 WWW 服務器軟件 (一個名為 apache 的軟件),那么你的 Linux 系統通常就會主動的分析該軟件的登錄文件。 同時某些憑證與認證的網絡信息是否過期的問題,我們的 Linux 系統也會很友好的幫你進行自動檢查!
其實你的系統會進行的例行性工作與你安裝的軟件多寡有關,如果你安裝過多的軟件,某些服務功能的軟件都會附上分析工具, 那么你的系統就會多出一些例行性工作啰!像鳥哥的主機還多加了很多自己撰寫的分析工具,以及其他第三方協力軟件的分析軟件, 嘿嘿!俺的 Linux 工作量可是非常大的哩!因為有這么多的工作需要進行,所以我們當然得要了解例行性工作的處理方式啰!
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀