2015-11-26 2 views
7

How to Correct Timezoneはどのように

に自動的に最後の時間を放浪中にシステムクロックを修正するために、私は浮浪者のサーバでシステムクロックを調整する方法を考え出しました。しかし、私が流しを止めてもう一度起動すると、システムクロックは常に9時間遅くなります。私は手動でntpコマンドを使用して調整することができますが、システムクロックを自動的に調整する方法を知りたいと思います。

私は以下を試しましたが、それでも動作しません。提案はありますか?

How to sync time on host wake-up within VirtualBox?

答えて

17

私が使用して、それは、プロバイダ特定すべきではない方法は私のVagrantfile

config.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime", run: "always" 

に次のように追加することで、あなたはタイムゾーンと「/ヨーロッパ/パリ」を交換する必要があります0123から来た自動検出部分

:タイムゾーンを自動検出

+0

:彼のスニペットのetc/GMTタイムゾーンの選択にタイプミス/間違いは7時間背後Wiki explanationを参照)、それゆえ我々はオフセットを交換する必要がPOSIX GMT + 7組のクロックごとに、ありますゲストの追加、それは完全に動作します。 (バージョンの不一致が本当にこの問題に関係するかどうかははっきりとわかりません)私は放流剤を使い続けるとルビーを学ぶべきだと思います。ありがとうsoooo! – Sho

+0

@Sho:また、シェルプロビジョニングスクリプトを使用したり、人形やシェフと一緒に書き留めることもできます。あなたはルビーを使う必要はありません。私はシェルプロビジョニングには満足しています。 – Sharpy35

3

A若干改善バージョンを設定したいです。

Vagrant.configure("2") do |config| 
    require 'time' 
    offset = ((Time.zone_offset(Time.now.zone)/60)/60) 
    timezone_suffix = offset >= 0 ? "+#{offset.to_s}" : "#{offset.to_s}" 
    timezone = 'Etc/GMT' + timezone_suffix 
    config.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/" + timezone + " /etc/localtime", run: "always" 
end 
0

My VagrantゲストOSの時刻が7日間で同期していませんでした。ゲストの追加とntpはゲストマシンにインストールされていないので、上記の方法は私のためには機能しませんでした。

私は最終的に、上記の方法は、お使いのホストマシンまたは任意のNTPサーバとゲストOSの時刻を同期しません https://askubuntu.com/a/683136/119371

cfg.vm.provision "shell", inline: "date -s \"$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z\"", run: "always", privileged: true, upload_path: "/home/vagrant/tmp/vagrant-shell" 

からハックを使用して問題を解決しました。 HTTPリクエストをgoogle.comに送信し、システム時刻をHTTP応答ヘッダーフィールドの時刻で更新します。

インターネットの接続速度や待ち時間によっては、更新された時間が数ミリ秒から数秒(通常は< 100ms)ずれている可能性があります。しかし、ほとんどの場合、それは重要ではありません。あなたが何らかの理由でwgetを使用したくない場合は、次の

cfg.vm.provision "shell", inline: "date -s \"$(curl -I google.com 2>&1 | grep Date: | cut -d' ' -f3-6)Z\"" 
3

curlバージョンで受け入れ答えは、それがタイムゾーン間を移動人々を考慮していないとして、十分に堅牢ではなく、必要となりますエンドユーザーはvagrant upの代わりにVagrantfileを変更する必要があります。

Scott P.の回答を基に、VMタイムゾーンとホストのtzを自動的に一致させる、より柔軟なソリューションです。バージョンが一致した後

Vagrant.configure("2") do |config| 
require 'time' 
offset = ((Time.zone_offset(Time.now.zone)/60)/60) 
timezone_suffix = offset >= 0 ? "-#{offset.to_s}" : "+#{offset.to_s}" 
timezone = 'Etc/GMT' + timezone_suffix 
config.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/" + timezone + " /etc/localtime", run: "always" 
end