Ntp kullanarak bir saat güncellemesi nasıl zorlanır?

Ubuntu'yu, pil destekli bir rtc'den yoksun ARM tabanlı gömülü bir sistemde çalıştırıyorum. Uyanma zamanı 1970'lerde bir yerlerde. Bu nedenle, saati geçerli saate güncellemek için NTP hizmetini kullanıyorum.

Aşağıdaki satırı ekledim /etc/rc.local dosya:

sudo ntpdate -s time.nist.gov

Ancak, başlattıktan sonra, zaman güncellenene kadar hala birkaç dakika sürüyor, bu süre zarfında etkin bir şekilde çalışamıyorum tar ve make.

Herhangi bir zamanda saat güncellemesini nasıl zorlayabilirim?


GÜNCELLEME 1: Aşağıdakiler (Eric ve Stephan sayesinde) komut satırından iyi çalışır, ancak yerleştirildiğinde saati güncelleyemez /etc/rc.local:

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; dateThu Jan  1 00:00:58 UTC 1970 * Stopping NTP server ntpd     [ OK ]  * Starting NTP server          [ OK ] Thu Feb 14 18:52:21 UTC 2013

Neyi yanlış yapıyorum?


GÜNCELLEME 2: 1. güncellemeye yanıt olarak gelen birkaç öneriyi takip etmeye çalıştım, ancak hiçbir şey işi gerektiği gibi yapmıyor gibi görünüyor. İşte denediğim şey:

  1. Sunucu değiştirin us.pool.ntp.org
  2. Programlara açık yollar kullanma
  3. Kaldır ntp tamamen hizmet et ve sadece git sudo ntpdate ... içinde rc.local
  4. Kaldır sudo yukarıdaki komuttan rc.local

Yukarıdakileri kullanarak, makine hala 1970'te başlıyor. Ancak, bunu bir kez giriş yaptıktan sonra komut satırından yaparken (via ssh), çağırdığım anda saat güncellenir ntpdate.

Yaptığım son şey, onu oradan çıkarmaktı. rc.local ve bir arama yapın ntpdate in my .bashrc dosya. Bu, saati beklendiği gibi günceller ve komut istemi kullanılabilir olduğunda gerçek geçerli saati alırım.

Ancak bu, makine açıksa ve kullanıcı oturum açmamışsa, zamanın hiçbir zaman güncelleme almadığı anlamına gelir. Tabii ki, yeniden yükleyebilirim ntp servis bu yüzden en azından saat başlangıçtan birkaç dakika içinde güncellenir, ancak daha sonra kare 1'e geri döndük.

Peki, yerleştirmenin bir nedeni var mı ntpdate içeri buyruk rc.local bunu yaparken gerekli görevi yerine getirmez .bashrc gayet iyi çalışıyor?

Ntpdate yerine (hangisi itiraz etmek), kullanma ntpd:

sudo service ntp stopsudo ntpd -gqsudo service ntp start

Bu -gq ntp daemonuna ofsetten bağımsız olarak zamanı düzeltmesini söyler (g) ve hemen çıkın (q) saati ayarladıktan sonra.

Muhtemelen ntp servis çalışıyor, bu yüzden ntpdate soketi (123 UDP bağlantı noktası) açamıyor ve ntp sunucusuna bağlanamıyor.

Komut satırından deneyin:

sudo service ntp stopsudo ntpdate -s time.nist.govsudo service ntp start

Eğer bunu koymak istiyorsan /etc/rc.local aşağıdakileri kullanın:

( /etc/init.d/ntp stopuntil ping -nq -c3 8.8.8.8; do   echo "Waiting for network..."donentpdate -s time.nist.gov/etc/init.d/ntp start )&

Saati hemen ayarlamak için sntp kullanın. Man sayfasından bazı örnekler:

USAGE     sntp ntpserver.somewhere             is the simplest use of this program and can be run as an unprivileged command to check the current time and error in the local clock.     sntp -Ss -M 128 ntpserver.somewhere             With suitable privilege, run as a command or from a cron(8) job, sntp -Ss -M 128 ntpserver.somewhere will request the time from the server, and if that server reports that it is             synchronized then if the offset adjustment is less than 128 milliseconds the correction will be slewed, and if the correction is more than 128 milliseconds the correction  will             be stepped.     sntp -S ntpserver.somewhere             With suitable privilege, run as a command or from a cron(8) job, sntp -S ntpserver.somewhere will set (step) the local clock from a synchronized specified server, like the (dep‐             recated) ntpdate(8), or rdate(8) commands.

Herhangi bir ntp zaman sunucusuyla çalışır. Sunucuların uygun bir listesi şu adreste bulunabilir ntppool.org .

İhtiyacın var sudo ayrıcalıklar, örneğin:

sudo sntp -Ss -M 128 0.de.pool.ntp.org

Kullanmak timedatectl saati ayarlamak için (systemd servis birimi). ntp önerilmiyor.

sudo systemctl restart systemd-timesyncd.service

Günlükleri okuyarak saatin güncellendiğini kontrol edebilirsiniz journalctl -xe | tail.

İle durum timedatectl status ve yapılandırma /etc/systemd/timesyncd.conf.

Referans

Diğerlerinin de belirttiği gibi, en iyi çözüm ntpd'ye varsayılan olarak 1000 saniye olan panik eşiğini yoksaymasını söylemektir. Panik eşiğini iki yoldan biriyle yapılandırabilirsiniz:

  • düzenlemek /etc/default/ntp ve -g seçeneğinin mevcut olduğundan emin olun.
  • /etc /ntp'yi düzenleyin.conf ve yer tinker panic 0 tepede

Şimdiye kadar bu aslında başkalarının önerdiği şeydir, ancak atmanız gerektiğini düşündüğüm bir adım daha var. Sahte hwclock programını yükleyin:

# apt-get install fake-hwclockfake-hwclock: Save/restore system clock on machines without working RTC hardware Some machines don't have a working realtime clock (RTC) unit, or no driver for the hardware that does exist. fake-hwclock is a simple set of scripts to save the kernel's current clock periodically (including at shutdown) and restore it at boot so that the system clock keeps at least close to realtime. This will stop some of the problems that may be caused by a system believing it has travelled in time back to 1970, such as needing to perform filesystem checks at every boot. On top of this, use of NTP is still recommended to deal with the fake clock "drifting" while the hardware is halted or rebooting.

Sahte hwclock kurulduğunda, makineniz 1970'in yeniden başladığını düşünmeye başlamaz. Makineniz önyüklendiğinde saatini sahte zaman damgasına ayarlayacaktır -hwclock son yeniden başlatma / kapatma sırasında yazdı. Bu, önyükleme yaparken ağ sorunları olması durumunda biraz doğru bir saate sahip olabileceğiniz anlamına gelir.

ntpdate, net dameon'dan farklı bir programdır. Ntpd bu yuva üzerinde çalıştığı için NTPDate büyük olasılıkla önyükleme sırasında hata veriyor.

Komut satırından çalıştırın

# sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start

Ayrıca ntpd'yi hep birlikte kaldırabilir (apt-get remove ntp) ve ntpdate'i her saat ya da öylesine kullanmak için bir cron betiği ekleyebilirsiniz.

Güncelleme

ntp hizmeti muhtemelen bu sistemde sizin için anlamlı bir değere sahip olmayacaktır, bu yüzden önce bunu kaldırın.

# sudo apt-get remove ntp

Şimdi komutu ekleyin:

ntpdate -sb time.nist.gov

-e doğru /etc/rclocal

Yeniden başlat. Bu noktada iyi olmalı.

rdate -s tick.greyware.com

tek yapmak istediğiniz saati bir kez ayarlamak ise, basit

Mevcut bazı Ubuntu tabanlı sistemlerin artık varsayılan olarak NTP hizmetini bile kullanmadığını unutmayın. Linux Mint 19 (Ubuntu 18.04) makinemde zaman tutuluyor systemd-timesyncd.

Bu yüzden senkronizasyonu kaybettikten sonra güncel bir saat elde etmek için sadece koşuyorum

sudo systemctl restart systemd-timesyncd

15.04'ten beri Ubuntu varsayılan olarak systemd kullanıyor. Bu nedenle zaman gibi kritik sistemler systemd aracılığıyla yönetilir. Sisteminizin hangi hizmeti kullandığını bulmak için şöyle bir şey çalıştırın

systemctl list-unit-files | grep -E 'ntp|timesyncd'

16.04'teki TechJS için hizmet şu şekildeydi ntp. Ubuntu 18.04'te (Nane 19) kendim için hizmet şu şekildedir systemd-timesyncd. İlginç bir şekilde, sahip olduğum bir 16.04 sunucusuna giriş yaptım ve kullanıyor systemd-timesyncd ayrıca.

Bunu bir Debian / Mint / Ubuntu (veya başka bir Debian türevi) sisteminde yapmanın doğru yolu, çizgiye sahip olmaktır

NTPD_OPTS="-g"

dosyada

/etc/default/ntp

Bu, ntpd'nin /etc/init dosyasından başlatılmasını sağlar.d / ntp betiği, "-g" seçeneğiyle çalışır, yani

 start-stop-daemon --start --quiet --oknodo --pidfile /var/run/ntpd.pid --startas /usr/sbin/ntpd -- -p /var/run/ntpd.pid -g -u 124:128

ntpd'nin sistem saatini 1000 saniyeden fazla olduğunda düzeltmesine izin vermek için, örneğin sistem saati başlangıçta 1 Ocak 1970 olduğunda, çünkü donanım rtc'si yoktur.

tlsdate TLS ile uzak sunuculara güvenli bir şekilde bağlanarak ve uzak zamanı güvenli el sıkışmadan çıkararak yerel saati ayarlar. Aksinentpdate, tlsdate TCP kullanır, örneğin uzak HTTPS veya TLS özellikli bir servise bağlanır ve size kötü amaçlı zaman bilgilerini beslemeye çalışan rakiplere karşı bir miktar koruma sağlar.

$ tlsdate -V -n -H encrypted.google.com

buradan 1:
'ntpdate -s ntp.ubuntu.com `

ntpdate ‘-b’ bayrağına dikkat edin. Ntpdate’in man sayfasından: “Adjtime () sistem çağrısını kullanarak döndürülmüş (varsayılan) yerine settimeofday() sistem çağrısını kullanarak adımlanacak zamanı zorlayın. Bu seçenek, önyükleme sırasında bir başlangıç dosyasından çağrıldığında kullanılmalıdır.” Aşağıdaki cevapların çoğu bunu içermiyor ve bu belki de işlerin yürümesindeki sorunun bir parçası. 128 Ms üzerindeki ofsetlerin varsayılan ‘çevirme’ mekanizmasını kullanarak senkronize edilmesi saatler alabileceğinden bahsettiği ‘-B’ bayrağının dikkate alın

‘timedatectl’, ama How to update system time behind a proxy? - Ask Ubuntu

/Etc / rc’de sudo kullanmaya gerek yoktur.yerel ayar dosyaları … hepsi zaten kök olarak çalıştırılıyor.