每個人或多或少都有一些約會或者是工作,有的工作是計劃的, 例如每年一次的加薪、每個月一次的工作報告、每周一次的午餐會報、每天需要的打卡等等; 有的工作則是臨時發生的,例如剛好總公司有高官來訪,需要你准備演講器材等等! 用在生活上面,例如每年的愛人的生日、每天的起床時間等等、還有突發性的計算機大降價 (啊!真希望天天都有!) 等等啰。
像上面這些計劃工作,通常你得要記錄在行事歷上面才能避免忘記!不過,由於我們常常在計算機前面的緣故,如果電腦系統能夠主動的通知我們的話,那麼不就輕松多了!嘿嘿!這個時候 Linux 的計劃工作計劃任務就可以派上場了!在不考慮硬件與我們服務器的連結狀態下,我們的 Linux 可以幫你提醒很多任務,例如:每一天早上 8:00 鐘要服務器連接上音響,並啟動音樂來喚你起床;而中午 12:00 希望 Linux 可以發一封信到你的郵件信箱,提醒你可以去吃午餐了; 另外,在每年的你愛人生日的前一天,先發封信提醒你,以免忘記這麼重要的一天。
那麼 Linux 的計劃工作是如何進行計劃任務的呢?所謂的計劃任務就是將這些工作安排執行的流程之意! 咱們的 Linux 計劃任務就是透過 crontab 與 at 這兩個東西!這兩個玩意兒有啥異同?就讓我們來瞧瞧先!
Linux 計劃任務的種類: at, cron
從上面的說明當中,我們可以很清楚的發現兩種計劃任務的方式:
● 一種是計劃的,就是每隔一定的周期要來辦的事項;
● 一種是突發性的,就是這次做完以後就沒有的那一種 (計算機大降價…)
那麼在 Linux 底下如何達到這兩個功能呢?那就得使用 at 與 crontab 這兩個好東西啰!
● at :at 是個可以處理僅執行一次就結束計劃任務的指令,不過要執行 at 時, 必須要有 atd 這個服務的支援才行。在某些新版的 distributions 中,atd 可能預設並沒有啟動,那麼 at 這個指令就會失效呢!不過我們的 CentOS 預設是啟動的!
● crontab :crontab 這個指令所設定的工作將會循環的一直進行下去! 可循環的時間為分鐘、小時、每周、每月或每年等。crontab 除了可以使用指令執行外,亦可編輯 /etc/crontab 來支持。 至於讓 crontab 可以生效的服務則是 crond 這個服務喔!
底下我們先來談一談 Linux 的系統到底在做什麼事情,怎麼有若干多的計劃任務在進行呢?然後再回來談一談 at 與crontab 這兩個好東西!
Linux 上常見的計劃任務
如果你曾經使用過 Linux 一陣子了,那麼你大概會發現到 Linux 會主動的幫我們進行一些工作呢! 比方說自動的進行在線更新 (on-line update)、自動的進行 updatedb 更新文件名數據庫、自動的作日志分析 (所以 root 常常會收到標題為 logwatch 的信件) 等等。這是由於系統要正常運作的話, 某些在後台下的工作必須要定時進行的緣故。基本上 Linux 系統常見的計劃任務有:
● 進行日志文件切割 (log rotate):
Linux 會主動的將系統所發生的各種信息都記錄下來,這就是日志 。 由於系統會一直記錄登錄信息,所以登錄文件將會越來越大!我們知道大型檔案不但占容量還會造成讀寫效率的困擾,因此適時的將登錄文件數據挪一挪,讓舊的數據與新的數據分別存放,則比較可以有效的記錄登錄信息。這就是 log rotate 的任務!這也是系統必要的計劃任務;
● 登錄文件分析 logwatch 的任務:
如果系統發生了軟件問題、硬件錯誤、資安問題等,絕大部分的錯誤信息都會被記錄到登錄文件中, 因此系統管理員的重要任務之一就是分析登錄檔。但你不可能手動透過 vim 等軟件去檢視登錄文件,因為數據太復雜了! 我們的 CentOS 提供了一只程序『 logwatch 』來主動分析登錄信息,所以你會發現,你的 root老是會收到標題為 logwatch 的信件,那是正常的!你最好也能夠看看該信件的內容喔!
● 建立 locate 的數據庫:
我們知道該指令是透過已經存在的文件名數據庫來進行系統上文件名的查詢。我們的文件名數據庫是放置到 /var/lib/mlocate/ 中。 問題是,這個數據庫怎麼會自動更新啊?嘿嘿!這就是系統的計劃工作所產生的效果啦!系統會主動的進行 updatedb 喔!
● whatis 數據庫的建立:
與 locate 數據庫類似的,whatis 也是個數據庫,這個 whatis 是與 man page 有關的一個查詢指令,不過要使用 whatis 指令時, 必須要擁有 whatis 數據庫,而這個數據庫也是透過系統的計劃工作計劃任務來自動執行的哩!
● RPM 軟件登錄文件的建立:
RPM 是一種軟件管理的機制。由於系統可能會常常變更軟件, 包括軟件的新安裝、非經常性更新等,都會造成軟件文件名的差異。為了方便未來追蹤,系統也幫我們將文件名作個排序的記錄呢!有時候系統也會通過計劃任務來幫忙 RPM 數據庫的重建喔!
● 刪除緩存文件:
某些軟件在運作中會產生一些緩存,但是當這個軟件關閉時,這些緩存可能並不會主動的被刪除。有些暫存盤則有時間性,如果超過一段時間後,這個緩存就沒有效用了,此時刪除這些緩存就是一件重要的工作! 否則磁盤容量會被耗光。系統通過計劃工作計劃任務執行名為 tmpwatch 的指令來刪除這些緩存文件呢!
● 與網絡服務有關的分析行為:
如果你有安裝類似 WWW 服務器軟件 (一個名為 apache 的軟件),那麼你的 Linux 系統通常就會主動的分析該軟件的登錄文件。同時某些憑證與認證的網絡信息是否過期的問題,我們的 Linux 系統也會很親和的幫你進行自動檢查!
其實你的系統會進行的計劃工作與你安裝的軟件多寡有關,如果你安裝過多的軟件,某些服務功能的軟件都會附上分析工具,那麼你的系統就會多出一些計劃工作啰!像鳥哥的主機還多加了很多自己撰寫的分析工具,以及其他第三方協力軟件的分析軟件, 嘿嘿!俺的 Linux 工作量可是非常大的哩!因為有這麼多的工作需要進行,所以我們當然得要了解計劃工作的處理方式啰!