tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

macに入れたvmware(fusion)で時間がずれる問題を対応する(ntpdate、cron)

はじめに

macに開発環境としてvmware(fusion)を入れてます。

gitからソースやらを落として開発するのですが、
タイトルの通り、エミュレートしたマシンの時間がずれるので
いろんなタイムスタンプがズレていろいろうまくいかなかったりします。

そんなときのメモ

ながれ

  1. 時間ずれ問題とは
  2. ntpdateで解決する
  3. cron登録

1. 時間ずれ問題とは

とは、とか言っときながらうまく説明できる気がしないので他の方の引用で。

【ズレる理由】

  • カーネルの割り込み間隔の違い(2.4系:100Hz、2.6系:1000Hz)
  • エミュレート仮想マシンでの割り込み処理落ち
  • 割り込み取りこぼし補正の挙動がちょっと変?

参考:VMware上のLinuxで時間がズレる問題を解決する、その1 【山澤】

2. ntpdateで解決する

解決方法は下記のようにいくつかあるようです。

  1. カーネルの起動オプションに細工
  2. タイマー割り込みの間隔を100Hzにしてカーネル再構築
  3. ntpdateコマンドで解決する

今回は3. ntpdateコマンドで解決するでいきます

まず確認
mac
# date
2014年 9月19日 金曜日 14時59分50秒 JST
vmware
2014年  9月 19日 金曜日 02:03:22 JST

結構ずれてるw

対応

コマンドは簡単でこう打つだけ。
ntp.nict.jp日本標準時プロジェクトのntpサーバです。

# sudo /usr/sbin/ntpdate ntp.nict.jp
  • こんなエラーの場合
# sudo /usr/sbin/ntpdate ntp.nict.jp
19 Sep 01:57:15 ntpdate[10151]: the NTP socket is in use, exiting

こんなエラーがある場合は、ntpサーバが動いているのが理由らしい。
ntpサーバを止めて再度挑戦するか、ntpサーバ自体で時間を合わせる

※ 一応動いてることを確認
# ps aux | grep ntp
ntp       2744  0.0  0.8   4292  4292 ?        SLs  Sep18   0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g

※ 止める
# sudo /etc/init.d/ntpd stop
ntpd を停止中:                                             [  OK  ]

※ 再挑戦
# sudo /usr/sbin/ntpdate ntp.nict.jp
19 Sep 15:03:26 ntpdate[10441]: step time server 133.243.238.244 offset 46611.350667 sec

これで時間が合いました。
ntpdで合わせたい人はほかの方のを参考にしてみてください。
これとか→CentOSにntpサーバを入れて、日本標準時刻に自動的に合わせるためのメモ

3. cron登録

ntpdateコマンドを1度たたいただけでは、またズレるのでこれをcron登録

cron登録
# crontab -e 
---- vi追記 ----
*/1 * * * * sudo /usr/sbin/ntpdate ntp.nict.jp
---------------

"/tmp/crontab.XXXXhNgdxr" 2L, 61C written
crontab: installing new crontab

後で確認するために1秒ごとにしてます。
日本標準時プロジェクトさんにご迷惑にならないように
実際はもっと眺めの間隔が良いでしょう。

確認

vmwareということでまっさらからはじめた状態で
もしかしたら何も入ってないかもしれないので一応確認します。
crontabはすでに動いてますが。。。

※ 一応確認
# sudo /etc/init.d/crond status
crond (pid 2886) を実行中...

※ sudo chkconfig --list crond
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off

※ ログも確認
# sudo vi /var/log/cron
-- なにもでない --

/var/log/cron自体はcronが正常に実行できればログは出ません。

しかし、どうしても自身の目で確認したい
自分のような人のために呼ばれたかどうか別途確認してみます。

※ 再度編集(ログを出すように変更)
# crontab -e
---- vi編集 ----
*/1 * * * * sudo /usr/sbin/ntpdate ntp.nict.jp >> /home/hoge/log/cron.log 2>>/home/hoge/log/cron_err.log
---------------

※ ようやく確認
# less /home/hoge/log/cron.log
19 Sep 15:14:02 ntpdate[10966]: adjust time server 133.243.238.164 offset -0.017239 sec
19 Sep 15:15:02 ntpdate[11037]: adjust time server 133.243.238.243 offset -0.016052 sec
19 Sep 15:16:01 ntpdate[11052]: adjust time server 133.243.238.163 offset -0.016595 sec
19 Sep 15:17:02 ntpdate[11069]: adjust time server 133.243.238.243 offset -0.017273 sec

ってな感じで、1秒おきに時間合わせが呼ばれてることが確認できました。
最後は間隔を長くしておきましょう

まとめ

むかーしにやったことがあっても、普段やらないことはほんと忘れます。
簡単なことでもこーやって書いておくとだいぶ忘れないんですよね!\(^o^)/