作者 主題: 自動網路校正時間後 dovecot(POP3) 自殺問題  (閱讀 12028 次)

0 會員 與 1 訪客 正在閱讀本文。

fireflybug

  • 憂鬱的高中生
  • ***
  • 文章數: 145
    • 檢視個人資料
Dear 學長們,

昨天忽然不能使用POP3,後來發現是因為網路自動校時,dovecot 自殺了>_<

**Unmatched Entries**
    dovecot: Time just moved backwards by 77 seconds. This might cause a lot of problems, so I'll just kill myself now. http://wiki.dovecot.org/TimeMovedBackwards: 1 Time(s)

不知道學長們有這種問題嘛?看wiki的網頁好像建議使用 The latest published clockspeed package is clockspeed-0.62.tar.gz.  比較好。

湯姆貓

  • 活潑的大學生
  • ***
  • 文章數: 475
    • 檢視個人資料
先前系統是設定每日校時,
結果就遇到這個問題(差2秒).
後來就設成每小時校時,
就沒這個問題了.

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
**Unmatched Entries**
    dovecot: Time just moved backwards by 77 seconds. This might cause a lot of problems, so I'll just kill myself now. http://wiki.dovecot.org/TimeMovedBackwards: 1 Time(s)

不知道學長們有這種問題嘛?看wiki的網頁好像建議使用 The latest published clockspeed package is clockspeed-0.62.tar.gz.  比較好。

該 wiki 已建議用 ntpd 了。我從來不曾碰到你這樣的問題,因為我都只用 ntpd。

fireflybug

  • 憂鬱的高中生
  • ***
  • 文章數: 145
    • 檢視個人資料
引用
該 wiki 已建議用 ntpd 了。我從來不曾碰到你這樣的問題,因為我都只用 ntpd。

看鳥哥介紹 ntpd 是屬於 SERVER,所以您都是自己架設ntpd server?

弟目前使用的解決方式是,參考旗標的書,建立shell script,讓系統自動偵測服務是否有啟動,若沒有則自動啟動該程式,經測試可正常運作,建立方式如下:

vi /usr/local/bin/watchpop3

程式碼如下:
================================================
#!/bin/sh

## 以下請自行依照您的環境進行合宜的設定

# 請設定重新啟動郵件伺服程式的指令, 如果您使用自行編譯的 Postfix,
# 因為 〈postfix〉 指令沒有 "restart" 參數, 所以請設定為 "postfix start"
# 這邊我只偵測pop3 110 ,所以下面我只針對 dovecot 作重新啟動的動作
RESTARTCMD="/etc/init.d/dovecot restart"

## 以下設定一般情形下保留預設值即可

# 郵件伺服器的通訊埠
PORT=110

# 設定系統執行檔的路徑
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# 記錄檔的路徑與檔案名稱
LOGFILE="/var/log/watchpop3.log"

# 記錄檔內的日期格式, 關於格式的代號與意義, 請執行 〈man date〉 閱讀其說明文件
DATEFMT="%Y/%m/%d %R"

## 以下為指令稿的程式碼, 如果對於 shell script 不太熟悉, 建議您不要隨意更動

# 使用 〈telnet〉 指令連線至通訊埠, 並且將連線時的
# 訊息交由 〈grep〉 指令判斷是否正常
echo | telnet localhost $PORT 2>&1 | \
grep 'Connection closed by foreign host' >/dev/null || {
   echo "`date +"$DATEFMT"` Failed on port $PORT, restarting..." >> $LOGFILE
   $RESTARTCMD > /dev/null 2>&1  # 若不正常則重新啟動該伺服程式
}

==================================================


將watchpop3此檔設定為可執行: chmod +x /usr/local/bin/watchpop3

二、每五分鐘自動檢查一次
編輯 /etc/crontab
vi /etc/crontab
==========================================
*/5 * * * * root /usr/local/bin/watchpop3
=============================
« 上次編輯: 2008-08-12 11:38 由 fireflybug »

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
引用
該 wiki 已建議用 ntpd 了。我從來不曾碰到你這樣的問題,因為我都只用 ntpd。

看鳥哥介紹 ntpd 是屬於 SERVER,所以您都是自己架設ntpd server?
弟目前使用的解決方式是,參考旗標的書,建立shell script,讓系統自動偵測服務是否有啟動,若沒有則自動啟動該程式,經測試可正常運作,建立方式如下:
vi /usr/local/bin/watchpop3
程式碼如下:
...

對,我自己架 ntpd server,架 ntpd server 難度是 dovecot(POP3) 的 1%。維持系統時間的正確性是很重要的,何樂而不為。
ntpd 校時可以精確到跟標準時間誤差 10 ms 左右,ntpdate 是早就過時的東西,不要用。時間對了就不會有亂七八糟的問題出現,花時間寫 script 自動偵測服務是否有啟動是沒必要的,你應該花時間去搞定時間校對才是正途。


fireflybug

  • 憂鬱的高中生
  • ***
  • 文章數: 145
    • 檢視個人資料
引用
對,我自己架 ntpd server,架 ntpd server 難度是 dovecot(POP3) 的 1%。維持系統時間的正確性是很重要的,何樂而不為。
ntpd 校時可以精確到跟標準時間誤差 10 ms 左右,ntpdate 是早就過時的東西,不要用。時間對了就不會有亂七八糟的問題出現,花時間寫 script 自動偵測服務是否有啟動是沒必要的,你應該花時間去搞定時間校對才是正途。


嗯,受教了,謝謝您的回覆,小弟這就去研究架設ntpd,然後再來觀察還會有 dovecot(POP3) 自殺的問題嗎,謝謝 ;)

VBird

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 1516
    • 檢視個人資料
    • http://linux.vbird.org
其實 ntpd 與 ntpdate 都是 NTP 這個軟體提供的,
只是一個是 server 而一個是 Client 端軟體而已。
ntpdate 是,當用戶端有需要重新校正時間時,才進行校時的動作,
ntpd 則是一個 daemon ,會一直啟動 port 123 來與上游的 time server 進行時間同步化,
兩者的工作方法不同,但是目標則是一致的,並沒有所謂的過時的問題呢!

另外,如果擔心 dovecot 會自動停止的問題,最簡單的作法,
在妳進行 ntpdate 之後,立即重新啟動 dovecot 就好啦!也不需要額外增加什麼 script 的指令。

這是小老兒的看法,提供給大家參考看看。

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
其實 ntpd 與 ntpdate 都是 NTP 這個軟體提供的,
只是一個是 server 而一個是 Client 端軟體而已。
ntpdate 是,當用戶端有需要重新校正時間時,才進行校時的動作,
ntpd 則是一個 daemon ,會一直啟動 port 123 來與上游的 time server 進行時間同步化,
兩者的工作方法不同,但是目標則是一致的,並沒有所謂的過時的問題呢!


man ntpd
       -q     Exit  the  ntpd just after the first time the clock is set. This
              behavior mimics that of the ntpdate  program,  which  is  to  be
              retired.  The  -g  and  -x options can be used with this option.
              Note: The kernel time discipline is disabled with this option.

ntpdate 沒有 ntpd 對校正時間所做的 error checking, signal processing 及溫合校時的演算法,可是 ntpd 可以模擬 ntpdate。ntpdate 以後可能不會發行。

fireflybug

  • 憂鬱的高中生
  • ***
  • 文章數: 145
    • 檢視個人資料
其實 ntpd 與 ntpdate 都是 NTP 這個軟體提供的,
只是一個是 server 而一個是 Client 端軟體而已。
ntpdate 是,當用戶端有需要重新校正時間時,才進行校時的動作,
ntpd 則是一個 daemon ,會一直啟動 port 123 來與上游的 time server 進行時間同步化,
兩者的工作方法不同,但是目標則是一致的,並沒有所謂的過時的問題呢!

另外,如果擔心 dovecot 會自動停止的問題,最簡單的作法,
在妳進行 ntpdate 之後,立即重新啟動 dovecot 就好啦!也不需要額外增加什麼 script 的指令。

這是小老兒的看法,提供給大家參考看看。

驚!!!哇~~~是鳥哥本人嗎?!您可以算的上是偉大的人物之一喔!!!您的網頁造福不少人民呢!!在這邊要跟您說聲:感謝您  :-*  :-*

當初不想架設ntpd是因為覺得它是個服務,看鳥哥網站說過伺服器不是服務越少越好嗎?剛剛架設好後發現更新頻率還真的滿高的,沒幾秒就更新一次,動作太頻繁,弟還是決定改回ntpdate,一天更新四次,然後服務偵測每10分鐘更新一次,確保mail服務不中斷,假日回鍋機會比較少 ;)

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5412
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
這幾天我家的機器也突然跑的飛快, 每分鐘會快上 6 秒 (10%), 但是在 CMOS 中的時間是正常的. 就只是 linux 裡頭的時間跑的很快.
機器上頭原本用的 ntpd 看起來並沒有作用的樣子 (時間差太多?), 似乎只有開始啟動 ntpd 時會對時一次, 之後就沒作用的樣子.

昨天發現時, 已經快了半天了, 依時間推算, 應該是這幾天才發生的問題, 不過, 這幾天似乎沒改什麼設定.

試了好幾個方式, 也把 kernel 換回舊的版本, 都無法解決, 後來就用 ntpdate 每兩分鐘對時一次才讓時間不會跑太快... 不過, 沒多久就發現 dovecot 會因為這個原因就自殺了.

網頁上頭建議的 ntpd 沒效果, 把 clockspeed 抓下來, 在 x86-64 上頭又編不過. 網路上頭 google 到的都是在 vm 裡頭變慢的, kernel 加上 clock 或 clocksource 參數也沒作用.

弄了一天, 最後看了這篇 http://tldp.org/HOWTO/Clock-3.html 的說明, 提到時間有關的那幾個軟體, 發現我的機器上頭有裝 adjtimex 程式, 結果 hwclock, adjtimex 弄來弄去, 發現反而變成每分鐘慢 2 秒. 看來似乎與 adjtimex 有關.

研究一下 adjtimex 的說明, 重新跑了 adjtimexconfig 之後, 發現時間又變快了. 似乎 adjtimexconfig 計算出來的 tick 與 freq 是有問題的. 我直接改 /etc/default/adjtimex 的設定, 把 tick 改到預設的 10000 之後, 時間似乎就很接近了. 後來直接把 adjtimex 移除, 結果 ntpd 似乎就有在運作了, 跑了一個小時, 時間看起來還是對的.

如果你有裝 adjtimex, 試著移除看看, 如果沒裝, 那就裝上去, 試著改 tick 與 freq 的參數看看.
依據 adjtimex manpage 的說明, tick 每增加一, 時間每天會變快 8.64 秒, tick 每減一, 每天會變慢 8.64 秒.
如果依據 tick 的調整之後, 仍有小差異的話, 再利用 (1<<16)*s/.0864 (s 是經 tick 調整後, 每天差異的秒數), 計算出 freq 的數值出來. 這樣子就可以讓 kernel 的時間維持在很正確的情形下.

不過... adjtimex 在我這裝了也很久了, 一直都沒問題, 也不知道為什麼這幾天就有問題. 最後是移除 adjtimex 才讓 ntpd 有作用.
« 上次編輯: 2008-09-02 13:09 由 twu2 »