CubieTruck NTP更新時間問題

自家的CubieTruck升級到14.04,免不了要設定很多雜項配置,NTP就是其中一項,這是用來做網路校時的。之前都是採用 ntpdate,然後寫到 crontab 裡面,固定時間每一小時或是每天更新一次,但卻發生了問題(假定 NTP Server是 pool.ntp.org)

# ntpdate pool.ntp.org
ntpdate[22682]: the NTP socket is in use, exiting

上面說的是 NTP 的 socket 已經被占用了,所以無法校時。所以先查查看是誰占用了。所以先下了一個命令 netstat -anp | grep 123(因為 ntp port是 123),才發現是一隻 ntpd 一隻程式已經占用了 NTP 123 Port,所以導致 ntpdate 無法正常使用。

這裡先說明一下 ntpd 和 ntpdate 兩隻程式的差異。相同的地方是這兩隻程式都是用來網路校時 NTP 的,但是 ntpdate 是一次性的更改時間,例如:發覺網路相差 100秒,那麼 ntpdate 就會立即把系統時間調整 100秒,然後程式自己結束離開。這可能會發生很多問題,例如 RTP 等等與時間敏感的協議,一下子時間差異太大了,就不同步了。所以比較保險的做法是用 ntpd。

有別於ntpdate,ntpd是一隻 daemon背景程式,如果程式察覺系統時間與網路伺服器時間有差異的話,它會盡可能地慢慢補償回去,例如每秒多或少個0.01秒,直到兩者時間差消失。這樣很好,不會一下子時間變化很大,讓一些時間敏感的程式不會察覺。但缺點是,它是一隻背景程式,二來時間不會立即生效,當然如果時間差異很大,例如是1000秒,ntpd還是會一次性的更改的,補償是補不回去的。

所以好了,crontab不用再寫 ntpdate了,系統背景 ntpd 會慢慢校時,但是有鑑於上次全球 ntp server被DDoS攻擊,所以我還是在 /etc/ntp.conf 檔案裡面把預設的 ntp server 改成比較著名且當地的 NTP Server,多設幾個是沒有關係的,但先後順序有關係。

server pool.ntp.org
server tw.pool.ntp.org

記得要重啟服務

service ntp restart