Hyper-V上のCentOSの時刻がかなりとち狂っていたので(1日で10分弱ほど)、定期的にNTPサーバに時刻補正することにしました。(おそらくβ版のSeLinux用統合コンポーネントをいれてるから、時刻が狂うのではないかと思います。RedHat用の正式版統合コンポーネントがでれば、そちらを入れたほうが、ホストOSと時刻同期取れるはず(?))
まず、Linuxの時刻同期には ntpd を使う方法と、ntpdate を使う方法があります。前者はntpのクライアントの機能に加えサーバとしての機能もあります。時刻が狂っていれば、正しい時刻に徐々に近づけていく方式みたいです。(Windowsのドメイン環境のクライアントの時刻同期方法とほぼ同じ) 後者は瞬時に指定したntpサーバの時刻に修正します。
本来はサーバと役割を考えると ntpd を使ったほうがいいのですが、FWの設定にミスがあるらしく、時刻同期ができませんでした。
ということで、ntpdateをつかった補正の方法です。(ntpdを使った方法については、(Linux)ntpdを使った時刻同期方法を参照。)
ます、ntpdate は ntpd サービスが稼働中だと
18 Aug 11:01:14 ntpdate[25758]: the NTP socket is in use, exiting
という風に、時刻同期できないようなので、サービスを落としておきます。 ついでに
# chkconfig ntpd off
で、次回起動時に上がらないようにします。ntpdate のコマンドはいたって簡単で、引数に時刻同期したいntpサーバを指定するだけです。
あとは定期的に ntpdate で時刻同期するように、シェルスクリプトを作り、cronに登録するだけです。
まず、シェルスクリプトです。
#!/bin/sh ntpsv="ntpサーバ名" /usr/sbin/ntpdate $ntpsv
いたってシンプルなスクリプトです。
が、詰まってしまいました。原因はコマンドを /usr/sbin/ntpdate とフルパスに書かないといけないのを ntpdate とだけ書いていたからです。
あと、cronに10分お気に実行するに登録します。cronの使い方は cron & シェルスクリプト
ハードウェアクロックのほうは仮想マシンということであんまり関係なさそうなので、今回は設定なしです。
参考: