Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux Sendmail 啟動緩慢根因分析與 /etc/hosts 一行修復法

編輯:Linux 教學

重啟 Linux 伺服器時,卡在 Starting sendmail: 數分鐘,日誌顯示 gethostby*.getanswer: asked for "webserver IN AAAA", got type "A"。這是 Sendmail 啟動時嘗試解析主機名的 AAAA(IPv6)記錄,卻只收到 A 記錄,導致 DNS 逾時重試。本文提供最簡單修復:在 /etc/hosts 給主機名加個別名。

一、 錯誤現場

Apr 28 13:41:36 webserver sendmail[3494]: gethostby*.getanswer: asked for "webserver IN AAAA", got type "A"
Apr 28 13:42:36 webserver sendmail[3499]: gethostby*.getanswer: asked for "webserver IN AAAA", got type "A"
Apr 28 13:43:37 webserver sendmail: sendmail startup succeeded

約 2 分鐘延遲,若 DNS 不穩定可達 5 分鐘。

二、 根因分析

  1. Sendmail 啟動需確認本機完整主機名(FQDN)對應的 IP。
  2. 呼叫 gethostbyname2(hostname, AF_INET6) 查詢 AAAA 記錄。
  3. 本機 /etc/resolv.conf 指向的 DNS 伺服器無 AAAA 記錄,返回 A 記錄或逾時。
  4. Sendmail 重試機制導致啟動阻塞。

三、 一行修復:編輯 /etc/hosts

修改前:

127.0.0.1 localhost.localdomain localhost

修改後(在 127.0.0.1 行尾加上主機名):

127.0.0.1 localhost.localdomain localhost webserver

webserver 為 hostname 指令輸出的主機名。

四、 驗證修復

service sendmail restart
Shutting down sm-client: [ OK ]
Shutting down sendmail: [ OK ]
Starting sendmail: [ OK ]
Starting sm-client: [ OK ]

啟動時間從分鐘級降為秒級。

五、 進階替代方案

  • 完善 DNS:在權威 DNS 為主機名添加 AAAA 記錄(即使指向 ::1)。
  • 設定 FQDN:/etc/sysconfig/network 設 HOSTNAME=webserver.example.com,並確保 /etc/hosts 有對應解析。
  • 停用 IPv6:echo "NETWORKING_IPV6=no" >> /etc/sysconfig/network(不建議,僅作暫時規避)。
  • 改用 Postfix/Exim:現代 MTA 啟動更快、配置更簡潔、安全性更高。

六、 結語

/etc/hosts 是「本地 DNS 覆寫層」,善用它解決主機名解析延遲、測試環境域名模擬、叢集節點互通等場景。Sendmail 啟動慢本質是**名稱解析失敗重試**,一行 hosts 即可斷根。現代建議遷移至 Postfix,並配合 systemd-analyze blame 定期審視啟動瓶頸。

Copyright © Windows教程網 All Rights Reserved