This might cause a lot of problems

Aug 1 00:04:22 HOSTNAME dovecot: Time just moved backwards by 11 seconds.
This might cause a lot of problems, so I’ll just kill myself now. http://wiki.dovecot.org/TimeMovedBackwards

ログの内容は“時間がズレ過ぎて問題が発生したかもしれないので、dovecotを停止する”ってことですが
ちょうどその時にntpdサービスが時間同期で11秒ほど修正してましたので、これが直接の原因だと思います。

解決策としては、ntpdサービスで大幅な時間の調整をさせないようにすれば良いのですが
ntpdサービスの動作方法として、stepモード(即時同期)とslewモード(ゆっくりと同期)がありますので
slewモードにすればdovecotサービスが落ちることはなくなります。
そこで、/etc/sysconfig/ntpdを編集すれば、ntpdサービスの動作モードを変更できます。

#vi /etc/sysconfig/ntpd
修正前

# Drop root to id ‘ntp:ntp’ by default.
OPTIONS=”-u ntp:ntp -p /var/run/ntpd.pid ” ←“-x”を追記

修正後
# Drop root to id ‘ntp:ntp’ by default.
OPTIONS=”-x -u ntp:ntp -p /var/run/ntpd.pid”

ntpdサービスの再起動
# /etc/rc.d/init.d/ntpd restart
ntpd を停止中: [ OK ]
ntpd: 時間サーバーと同期中: [ OK ]
ntpd を起動中: [ OK ]

ntpdサービスの起動オプションを確認
# ps aux |grep ntp
ntp 8626 0.0 0.2 19188 4888 ? SLs 01:24 0:00 ntpd -x -u ntp:ntp -p /var/run/ntpd.pid
root 8635 0.0 0.0 65404 796 pts/0 R+ 01:24 0:00 grep ntp

以上で、ntpdサービスの動作がslewモードになりますが、大幅な時間のズレを直すのに
時間がかかるようになるという弊害
もありますので、適宜対応して下さい。

ログにある http://wiki.dovecot.org/TimeMovedBackwards を斜め読みしてみると

・ntpdateで時間調整するのは推奨しない
・仮想サーバでの使用は推奨しない

解決策として
・ntpdで定期的に時間を同期させる
・clockspeed(http://cr.yp.to/clockspeed.html)かchrony(http://chrony.sunsite.dk/)を使え
・スクリプトを使ってdovecotサービスの動作確認

スクリプトの内容はページ下に公開されており、dovecotサービスが起動(port143がlisten)しているかどうかを確認できます。
これは”lsof”コマンドと”netstat”コマンドの2種類があるので、環境に適した方を選べますのでcronに設定すれば
時間ズレでdovecotサービスが停止してもどうにかなる、そうです。

===========================================
ntpdについてのメモ
■通常設定の場合
128ms以内の場合はslewモード、それ以上はstepモードで動作する。
この敷居値は設定次第(step or slew)では600秒まで変更することができるが、もし600秒のズレだと修正までに14日かかる。

■動作モードの種類
・stepモード
 即時に時間同期

・slewモード
 1秒間に0.0005秒ずつ修正

■ntpサービスの動作状況の確認コマンド
ntpd -d

例:#ntpd -dntpd
4.2.2p1@1.1570-o Sat Dec 19 00:56:13 UTC 2009 (1)
addto_syslog: precision = 1.000 usec
create_sockets(123)
addto_syslog: no IPv6 interfaces found
addto_syslog: ntp_io: estimated max descriptors: 1024, initial socket boundary: 16
addto_syslog: bind() fd 16, family 2, port 123, addr 0.0.0.0, in_classd=0 flags=9 fails: Address already in use
addto_syslog: bind() fd 16, family 2, port 123, addr 127.0.0.1, in_classd=0 flags=5 fails: Address already in use
addto_syslog: bind() fd 16, family 2, port 123, addr 192.168.5.2, in_classd=0 flags=25 fails: Address already in use
init_io: maxactivefd 0
local_clock: time 0 base 0.000000 offset 0.000000 freq 0.000 state 0
addto_syslog: getaddrinfo: “::1” invalid host address, ignored
getaddrinfo: “::1” invalid host address, ignored.
key_expire: at 0
peer_clear: at 0 next 1 assoc ID 2792 refid INIT
newpeer: 192.168.5.2->192.168.5.1 mode 3 vers 4 poll 6 10 flags 0x1 0x1 ttl 0 key 00000000
addto_syslog: frequency initialized -90.700 PPM from /var/lib/ntp/drift
local_clock: time 0 base 0.000000 offset 0.000000 freq -90.700 state 1
report_event: system event ‘event_restart’ (0x01) status ‘sync_alarm, sync_unspec, 1 event, event_unspec’ (0xc010)
addto_syslog: sendto(192.168.5.1) (fd=-1): Bad file descriptor
transmit: at 1 192.168.5.2->192.168.5.1 mode 3
auth_agekeys: at 1 keys 1 expired 0
timer: refresh ts 0h

コメント

  1. CNA Training より:

    My cousin recommended this blog and she was totally right keep up the fantastic work!