2015-11-26 15 views
7

How to Correct TimezoneCách sửa đồng hồ hệ thống trong âm thanh tự động

Lần trước, tôi đã tìm ra cách điều chỉnh đồng hồ hệ thống trong máy chủ ảo. Tuy nhiên, khi tôi dừng âm thanh và bắt đầu lại, đồng hồ hệ thống luôn trễ 9 giờ. Tôi có thể điều chỉnh bằng cách sử dụng lệnh ntp theo cách thủ công, nhưng tôi muốn biết cách điều chỉnh đồng hồ hệ thống tự động.

Tôi đã thử bên dưới, nhưng nó vẫn không hoạt động. Có đề xuất nào không?

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

Trả lời

17

Phương pháp tôi sử dụng và nó không phải là nhà cung cấp cụ thể là thêm sau trong Vagrantfile tôi

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

bạn sẽ cần phải thay thế '/ Châu Âu/Paris' với múi giờ bạn muốn đặt

+0

Sau khi phù hợp với phiên bản của khách bổ sung, nó hoàn toàn hoạt động. (Tôi không thể nhìn thấy rõ ràng nếu phiên bản không phù hợp thực sự quan trọng đối với vấn đề này) Tôi nghĩ rằng tôi nên học ruby ​​nếu tôi sẽ tiếp tục sử dụng vagrant. Cảm ơn rất nhiều! – Sho

+0

@Sho: bạn cũng có thể sử dụng âm đạo với các đoạn mã cung cấp vỏ hoặc viết chúng với con rối hoặc đầu bếp. bạn không bị buộc phải sử dụng ruby. tôi khá hài lòng với việc cung cấp vỏ. – Sharpy35

3

Phiên bản được cải thiện một chút tự động phát hiện múi giờ:

Phần phát hiện tự động đến từ here.

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

Thời gian hệ điều hành Guest Vagrant của tôi không được đồng bộ hóa sau 7 ngày. Các phương pháp trên không có tác dụng đối với tôi, vì phần bổ sung của Khách và ntp không được cài đặt trong máy khách của tôi.

cuối cùng tôi giải quyết vấn đề này bằng cách sử dụng hack từ 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" 

Phương pháp trên không đồng bộ hóa thời gian hệ điều hành khách với máy chủ của bạn hoặc bất kỳ máy chủ NTP. Nó gửi một yêu cầu HTTP tới google.com và cập nhật thời gian hệ thống với thời gian trong trường tiêu đề phản hồi HTTP.

Do đó, tùy thuộc vào tốc độ kết nối internet và độ trễ của bạn, thời gian cập nhật có thể bị tắt vài phần nghìn giây trong vài giây (thường là < 100ms). Nhưng nó không quan trọng đối với hầu hết các trường hợp.

Tiếp theo là phiên bản curl, nếu bạn không muốn sử dụng wget vì lý do nào

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

Được chấp nhận câu trả lời là không mạnh mẽ đủ, vì nó không tính đến đối với những người đi du lịch giữa các múi giờ, và đòi hỏi người dùng cuối sửa đổi Vagrantfile thay vì chỉ thực hiện vagrant up.

Xây dựng câu trả lời của Scott P., đây là giải pháp linh hoạt hơn phù hợp với múi giờ VM cho máy chủ lưu trữ tự động. Có một lỗi đánh máy/sai lầm trong việc lựa chọn múi giờ Etc/GMT đoạn mình, theo POSIX GMT + 7 bộ đồng hồ 7 giờ đằng sau (xem Wiki explanation), do đó chúng ta cần phải trao đổi offsets:

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 
Các vấn đề liên quan