肆、工作排程:
Linux 提供四種自動執行程式的機制,包含:cron、anacron、at 和 batch。使用時機分述如下:
| cron | 主要用來做周期性工作的排程,會根據系統時間來判斷程式是否該執行,萬一系統時間設定不正確將會造成排程錯亂。 |
| anacron | 和 cron 一樣也是用來做周期性工作的排程,但是它不檢查系統時間,而改以讀取時間戳記來計算間隔日數,依間隔日數判斷是否該執行,適用於每天、每週或每月只執行一次的工作。 |
| at | 讓指定程式在某個時間點到達時自動執行,適用於只執行一次的工作。 |
| batch | 指定工作在系統閑置時執行,可用來避開高負載時段。 |
使用 cron 前請先確定伺服程式是否已經執行,可以使用以下指令來查看:
/sbin/service crond status
雖然 cron 允許使用者自行安排自己的工作,以方便在結束連線後,程式能自動運作,但這類工作對於已經提供多種網路服務的伺服器來說負擔太大,因此建議不要教使用者使用它,本文也不討論這類的事情,畢竟我們的伺服器只是 PC,不是 main frame。
cron 的主要設定檔 /etc/crontab 內容如下:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/
# run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly |
前面幾行是定義 cron jobs 執行時的環境,我們不需要去修改它,底下四行是用來定義工作排程,上面看到的是系統排程的定義區分為七個欄位,分別代表:分、時、日、月、星期、執行時的身分、要執行的 script,而一般的工作則只區分為六個欄位,前五個欄位與系統排程相同,最後一個欄位則是要執行的工作。
| 欄位 | 有效數值 |
| 分 | 0~59, * 代表每分鐘都要執行,1-4 是指前四分鐘各要執行一次,如果執行的時間不是連續的,可以用逗號來區隔,例如:5,10,15,20 代表第五分鐘、第十分鐘、第十五分鐘、第二十分鐘時要執行,如果每隔五分鐘要執行一次,可以簡寫為 */5。 |
| 時 | 採用 24 時制,有效數值為 0~23,可以使用 * - , / 等通配字元,意義同上。 |
| 日 | 1~31,如果使用 30,則每逢二月會跳過不執行,如果使用 31,會變成大月時才執行,因此對於每月都得執行一次的工作,請安排在 28 日以前執行。當月份有指定時,必須為有效日期,否則該工作將永遠不執行。通配字元使用方式同上。 |
| 月 | 1~12,也可以直接用英文縮寫:jan、feb......等。 通配字元使用方式同上。 |
| 星期 | 0~7,其中 0 和 7 都代表星期天,也可以使用英文縮寫:sun、mon......等。 通配字元使用方式同上。 |
如果要執行的工作是屬於每天、每週或每月執行一次,建議改用 anacron 以確保一定會執行,如果是每小時要執行,建議直接在 /etc/cron.hourly 目錄內直接新增一個定義檔,語法需與 /etc/crontab 相同。 其它情形則把定義檔放置在 /etc/cron.d,這裡的定義檔將會每分鐘都檢查一次。
anacron 的設定檔位於 /etc/anacrontab,如前所述它是以檢查時間間隔的方式來決定是否執行,因此不受系統時間設定的影響,為了要檢查時間間隔必須紀錄每個工作每次執行時的時間戳記(timestamp),這些檔案會放置在 /var/spool/anacron 目錄裡面。
anacron 設定檔分為間隔週期、執行延遲時間、工作識別名稱、 要執行的工作四個欄位,說明如下:
| 欄位 | 使用說明 |
| 間隔週期 | 每次執行工作時應相隔幾天,小於一天的請改用 cron |
| 執行延遲時間 | 當距離上次執行的時間超過時間間隔,這表示中間有執行失敗的情形,這種情形下在延遲幾分鐘後,該工作會再嘗試執行一次。 |
| 工作識別名稱 | 用來識別不同工作,同一名稱不能重複使用。 |
| 要執行的工作 | 通常是一個命令或 script |
anacron 的設定檔預設內容如下:
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin;/usr/local/sbin;/usr/local/bin
# These entries are useful for a Red Hat Linux system. 1 5 run-parts /etc/cron.daily 7 10 run-parts /etc/cron.weekly 30 15 run-parts /etc/cron.monthly |
這個設定可以用來確保 cron job 一定會如期執行。
at 指令用來執行一次性的工作而非週期性的工作,我們可以指定要執行的時間,它和 cron 一樣會檢查系統時間的設定,因此設定錯誤會造成工作無法正確執行,設定方式如下:
at 16:00 011503[ ENTER](排定執行時間是 2003年1月15日下午4點)
at> perl /root/backup.pl[Ctrl-D]
我們可以使用 atq 指令來查詢現在尚未執行的預定工作。
如果想根據主機負載情形來決定執行時間,必須使用 batch 指令,實際上 batch 指令算是 at 的特殊應用,使用方式如下:
batch[ ENTER](不用指定執行時間)
at> perl /root/backup.pl[Ctrl-D]
伍、Email:
Email 術語
電子郵件系統的發展源遠流長,早從網路萌芽階段就被實作出來,早期電子郵件系統僅能應用在 ARPANET 網路上(1972年,當時 Internet 尚未誕生,而且是使用 FTP 傳送電子郵件),要參與交換郵件的主機都 必須安裝 sendmail,要看信必須 telnet 到主機上才看得到。在 1982 年時因應網際網路的誕生,制定 SMTP 協定作為不同網路系統間交換郵件的標準,當然在這樣的年代裡,還沒有病毒信和垃圾郵件的困擾。
電子郵件普及後,連一般無法安裝 sendmail 的工作站也都有寄信和收信的需求,這時就需要開發另一種通訊協定來應付這個需求,那就是 POP,這個通訊協定用來讓工作站可以連上郵件伺服器,進行帳號認證 後下載自己的郵件,並能將伺服器上的郵件刪除,目前是使用第三個版本稱為 POP3。另外還有一個功能更強大的通訊協定稱為 IMAP,它除了收信外還可以進行郵件信箱管理,多半應用於網頁郵件系統,例如:SquirrelMail......等 。
由於 SMTP 通訊協定當初在設計時並未考量使用者認證的問題(僅設計了遞送功能),另一方面能提供使用者認證的 POP3 卻又未設計信件上傳功能(僅設計下載功能),這樣的設計當然會衍生出許許多多的弊病,包括郵件來源不明、反覆多餘的濾信機制、郵件轉寄難以防堵、郵件帳號驗證有安全漏洞、郵件容易偽裝......等等弊端。 而這些問題必須從通訊協定著手改良才行,目前新版的 SMTP 通訊協定已經加入了認證與安全連線機制足以應負此需求。
在實際安裝設定之前,先介紹幾個電子郵件系統的術語:
| MUA | 使用者透過這個程式與郵件伺服器溝通,包括收信(以 POP3 連接收信伺服器程式 imapd)或寄信(以 SMTP 連接 MTA),例如: Outlook Express......等。 |
| MTA | 使用 SMTP 通訊協定將信件傳遞到不同郵件主機上面,例如: sendmail, postfix, Qmail......等。 |
| MSA | 是新版 sendmail 發展給 SSMTP 進行 TLS/SSL 連線的 client 端代理器。 |
| MDA | 收到信後將信件分配到不同使用者信箱內,算是 MTA 的一個子系統,譬如 BBS 從定義上來說也算是 MDA( BBS 功能複雜,當然不僅僅是 MDA),有些 MDA 被設計來進行濾信動作,它們必須在 local 端運作,因此又被稱為 LDA,例如: procmail......等。 |
| MailBox | 尚未被使用者下載的郵件,會暫存在伺服器的硬碟空間裡,稱之為信箱。所有使用者信箱的總合必須約等於該分割區總容量的一半,以避免造成信箱尚有空間但郵件系統卻無法運作的現象。 |
| Mail Gateway | 是一種特殊的郵件伺服器,通常扮演代理器的角色,負責統籌某機構內所有信件的收發,並分配郵件給下屬的郵件伺服器們,透過這個機制能夠加速郵件的交換,並且能夠進行一致的濾信控制。 |
sendmail 是最多人使用的 MTA,但同時也是安全漏洞最多的系統,如果您安裝 sendmail,那麼定期更新程式是免不了的工作,為了這個原因有許多版本的 Linux 改採 postfix 作為內建電子郵件程式,如果安全需求更高則可以考慮購買商業版的 Qmail,這支程式到目前為止尚未被發現有任何安全漏洞。 本文將只介紹大家最常用的 sendmail,同時請大家務必下載最新版本(8.12以後的版本)來安裝。
電子郵件結構
下表是一封完整的電子郵件內容,你可以在 Outlook Express 中在信件上按右鍵選「內容」來觀察。當電子郵件在郵件主機之間傳送時,會紀錄詳細的傳送過程,稱為信封。信封是給郵件主機追蹤郵件用的,對一般使用者意義並不大,因此通常會被 MUA 應用程式隱藏起來。信件本文則又區分為標頭和內文兩個部分:標頭用來紀錄寄信人、收信人、信件主旨、優先等級......等等,這些都會用來作為郵件索引,以方便使用者搜尋想閱讀的信件;郵件內文就是我們看到的信件內容,它允許使用 MIME 格式來夾帶檔案。
當郵件主機收到信件時,會先進行郵件剖析將各個部分分離出來以方便進行後續處理,所謂後續處理包含:網址偽裝、使用者偽裝、檢查寄信人及收信人欄位是否完整、檢查是否轉信、分信、濾信......等等,這些過程將在後面討論。
mail envelope(信封) Return-Path: <spps@mail.spps.tp.edu.tw> Received: from www.spps.tp.edu.tw (www.spps.tp.edu.tw [192.57.1.2]) (authenticated bits=0) by mail.spps.tp.edu.tw (8.12.8/8.12.5) with ESMTP id h2K3qpnv011171 for <shane@mail.spps.tp.edu.tw>; Thu, 20 Mar 2003 11:52:51 +0800 Received: from mail pickup service by www.spps.tp.edu.tw with Microsoft SMTPSVC; Thu, 20 Mar 2003 11:40:30 +0800 |
mail content(信件本文) Header(信件標頭) From: spps@mail.spps.tp.edu.tw To: <shane@mail.spps.tp.edu.tw> Subject: ●修繕報修通知● Date: Thu, 20 Mar 2003 11:40:30 +0800 | Body(信件內文) ●報修者姓名:林XX,他的E-mail是:xxx@mail.spps.tp.edu.tw ●問題類別:技術問題 ●問題主旨:114電腦一直當機 ●問題內容: ●請系統管理師盡速處理。 |
|
啟動 IMAP
請參考基礎班講義,自行修改 xinetd 設定,將 imap 及 pop3 服務啟動,這樣使用者才能連上來收信!
如果要啟用 SSL 安全通道,讓支援 spop3 或 simap 的 MUA 能夠以更安全的方式來連線,請執行底下的指令,以便建立安全憑證:
cd /usr/share/ssl/certs
make imapd.pem
配合 SPOP3 的使用,請修改 outlook express 的設定:
