ntp kullanarak saat güncellemesi nasıl yapılır?

321

Ubuntu'yu, pil destekli RTC'siz ARM tabanlı bir gömülü sistemde çalıştırıyorum. Uyanma süresi, 1970'de bir yerdedir. Bu nedenle, zamanı şimdiki zamana güncellemek için NTP hizmetini kullanırım.

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

sudo ntpdate -s time.nist.gov

Ancak, başlatma işleminden sonra, süre güncellenene kadar hala birkaç dakika sürer, bu süre zarfında tar ve make ile etkin bir şekilde çalışamıyorum.

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

GÜNCELLEME 1: Aşağıdakiler (Eric ve Stephan'a teşekkürler) komut satırından düzgün çalışır, ancak /etc/rc.local koyduklarında saati güncelleyemezler:

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; date
Thu 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ç öneriye uymayı denedim, ancak hiçbir şey işi gerektiği gibi yapmıyor gibi görünüyor. İşte denedim:

  1. Sunucuyu us.pool.ntp.org olarak değiştirin
  2. Programlara açık yollar kullanın
  3. ntp hizmetini tamamen kaldırın ve sudo ntpdate ... dizininde rc.local bırakın
  4. sudo 'sini rc.local ' den yukarıdaki komuttan kaldırın.

Yukarıdakileri kullanarak, makine hala 1970’de başlıyor. Ancak, bunu giriş yaptıktan sonra ( ssh aracılığıyla), saat ntpdate çağırır açmaz saat güncellenir.

Son yaptığım şey, rc.local 'sinden kaldırmak ve ntpdate dosyamda .bashrc ' ye bir çağrı yapmaktı. Bu, saati beklendiği gibi günceller ve komut istemi kullanıma sunulduğunda gerçek geçerli saati elde ederim.

Ancak , bu, makine açıksa ve hiçbir kullanıcı giriş yapmazsa, zamanın hiçbir zaman güncelleme almaması anlamına gelir. Tabii ki, ntp hizmetini, en azından saat başlangıcından itibaren birkaç dakika içinde güncellenecek şekilde yeniden yükleyebilirim, ancak sonra kare 1'e geri döndük.

Yani, ntpdate dizinine rc.local komutunun yerleştirilmesi için gereken görev yerine getirilmemesinin bir nedeni var mı? .bashrc öğesi düzgün çalışıyor mu?

    
sordu ysap 13.02.2013 22:58

15 cevap

282

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

Komut satırından deneyin:

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

Bunu /etc/rc.local içine koymak istiyorsanız aşağıdakileri kullanın:

( /etc/init.d/ntp stop
until ping -nq -c3 8.8.8.8; do
   echo "Waiting for network..."
done
ntpdate -s time.nist.gov
/etc/init.d/ntp start )&
    
verilen cevap Eric Carvalho 14.02.2013 00:13
425

ntpdate yerine ( kullanımdan kaldırıldı ),

kullanın
sudo service ntp stop
sudo ntpd -gq
sudo service ntp start

-gq , ntp sunucusunun offset ( g ) değerinden bağımsız olarak zamanı düzeltmesini ve saati ayarladıktan hemen sonra ( q ) çıkmasını söyler.

    
verilen cevap Martin Schröder 14.02.2013 13:32
49

Zamanı hemen ayarlamak için sntp tuşunu kullanın. Örneğin:

sudo sntp -s 24.56.178.140

-s sonrası sayılar, herhangi bir ntp zaman sunucusu olabilir, Ft’de NIST’dir. Collins, Colorado.

    
verilen cevap Guest 08.11.2013 02:00
37

Başkalarının işaret ettiği gibi, en iyi çözüm, ntpd'nin varsayılan olarak 1000 saniye olan panik eşiği yoksayması talimatını vermesidir. Panik eşiğini iki yoldan biriyle yapılandırabilirsiniz:

  • /etc/default/ntp değerini düzenleyin ve -g seçeneğinin bulunduğundan emin olun.
  • /etc/ntp.conf dosyasını düzenleyin ve tinker panic 0 değerini en üste yerleştirin

Şimdiye kadar bu, başkalarının tavsiye ettiği şeydi, ancak almam gerektiğini düşündüğüm bir adım daha var. Sahte-hwclock programını yükleyin:

# apt-get install fake-hwclock


fake-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 yüklü olduğunda, makineniz 1970’i yeniden düşünmeyi başaramayacaktır. Makineniz önyüklendiğinde, saatini son yeniden başlatma / kapatma sırasında yazılan zaman damgası sahte-hwclock'a ayarlayacaktır. Bu, önyükleme yaparken ağ sorunlarının olması durumunda biraz doğru bir saatiniz olabileceği anlamına gelir.

    
verilen cevap dfc 04.04.2014 00:11
12

ntpdate, net dameon'dan farklı bir programdır. NTPDate muhtemelen önyüklemede hata veriyor çünkü ntpd bu sokette çalışıyor.

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 hepsini birlikte kaldırabilir (apt-get remove ntp) ve ntpdate'i her saat veya daha fazla 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

- /etc/rclocal

yeniden başlatır. O noktada iyi olmalı.

    
verilen cevap Stephan 14.02.2013 00:07
8
rdate -s tick.greyware.com

tek yapmanız gereken saati bir kez ayarlamanız, basit

    
verilen cevap batflaps 26.02.2015 23:57
7

Bunu bir Debian / Mint / Ubuntu (veya başka bir Debian türevi) sisteminde yapmak için doğru yolu,

satırına sahip olmaktır
NTPD_OPTS="-g"

dosyasında

/etc/default/ntp

Bu, /etc/init.d/ntp betiğinden ntpd başlatıldığında, "-g" seçeneği ile çalışır, viz

olmasını sağlar.
 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 s'den fazla olduğunda düzeltmesine izin vermek için, örn. sistem zamanı, donanım RTC'si olmadığından, başlangıçta 1 Ocak 1970'tir.

    
verilen cevap J G Miller 03.04.2014 13:20
4

Saati adımlamak için -b seçeneğini kullanmayı deneyin.

    
verilen cevap Cry Havok 13.02.2013 23:18
4

tlsdate , TLS ile uzak sunuculara güvenli bir şekilde bağlanarak ve uzaktaki zamanı güvenli el sıkışmasından çıkararak yerel saati ayarlar. . aksine Örneğin, ntpdate , tlsdate TCP kullanıyor, örneğin uzak bir HTTPS veya TLS'ye bağlanıyor  etkinleştirilmiş hizmet ve denemeye çalışan rakiplere karşı bazı koruma sağlar  Kötü niyetli zaman bilgisini besle.

$ tlsdate -V -n -H encrypted.google.com
    
verilen cevap Kokizzu 23.02.2016 12:52
2

İşte

saati ayarlamak için timedatectl kullanın, ntp kullanımdan kaldırıldı.

    
verilen cevap xiaoyifang 29.11.2016 09:57
1

ntpd algoritmaları, 128 ms'den daha az örnek mutlak değerinin, 128 ms'den daha az olmadığı aralık olmadığı sürece, 128 ms'yi aşan örnek ofsetlerini atar. Bundan sonraki ilk örnek, ofset ne olursa olsun, belirtilen zamana doğru adım atar. Pratikte bu, saatin yanlışlıkla düşük bir insidansa düştüğü yanlış alarm oranını azaltır.

Normalde, offset varsayılan olarak 1000 s olan akıl sınırını aşarsa ntpd çıkar. Bu -g seçeneği ile kapatılabilir:

-g     Normalde, offset varsayılan olarak 1000 s olan akıl sınırını aşarsa ntpd çıkar. Akıl sağlığı limiti sıfıra ayarlanırsa, akıl denetimi yapılmaz ve herhangi bir ofset kabul edilebilir. Bu seçenek limiti geçersiz kılar ve zamanın kısıtlama olmaksızın herhangi bir değere ayarlanmasını sağlar; Ancak, bu sadece bir kez olabilir. Bundan sonra, sınır aşıldığında ntpd çıkacaktır. Bu seçenek -q seçeneği ile kullanılabilir.

İşte 'den

-Jonathan Natale

    
verilen cevap Jonathzen 28.01.2015 22:26
1

Peki,

Ahududu pi'mde hwclock olmayan bir raspbian (debian wheezy) çalıştırıyorum. Küçük bir komut dosyası yazmayı ve internet arayüzümün ardından çalıştırmayı başardım, böylece ağın kullanılabilir hale geldiğinden eminim, saat güncellenir.

Önce, ntpdate paketini çalıştırarak kontrol edin

sudo apt-get update
sudo apt-get install ntpdate

Aşağıdakileri /etc/network/interfaces dosyanıza eklemelisiniz (kesinlikle eth0 burada sadece bir örnektir):

auto eth0
    iface eth0 inet dhcp
    post-up /usr/local/sbin/update-time.sh

Ve aşağıdaki komut dosyasını /usr/local/sbin/update-time.sh dizininde oluşturun ( chmod ile çalıştırılabilir yapmayı unutmayın):

#!/bin/bash
# This script checks if the ntp process is running, stops it, updates the system time, starts it again

ps cax | grep -c ntpd > /dev/null
onoff=$?
if [ "$onoff" -gt 0 ]; then
    echo "stopping ntpd..."
    service ntp stop
    echo "ntpd stopped"
else
    echo "ntpd not running, ready to update the date"
fi


isinstalled=$(dpkg-query -l | grep -c ntpdate)
if [ "$isinstalled" -gt 0 ]; then
    ntpdate -t 3 -s ntp4.stratum2.ru
    echo "date and time update executed"
else
    echo "ntpdate package not installed, can't update using ntp"
fi

echo "restarting ntpd..."
service ntp start 
echo "ntpd running"
echo "printing current date and time:"
date

exit
    
verilen cevap art.shutter 12.12.2015 16:14
0

ntpd ve ntpdate varsayılan olarak kısıtlanmış bir bağlantı noktası (UDP 123) kullanarak çalışır. Bir güvenlik duvarının arkasındaysanız, ntpd hiçbir zaman çalışmaz, ancak ntpdate -u seçeneği ile çalışabilir. Örneğin: ntpdate -u 0.ubuntu.pool.ntp.org veya ntpdate -u time.nist.gov öğesi her ikisi de düzgün çalışmalıdır.

    
verilen cevap G. N. DeSouza 05.06.2015 01:01
0

Sisteminiz senkronize edilmeden önce geçen süreyi beklemek için gereken süreyi karşılayabiliyorsanız, ntp-wait komutunu kullanabilirsiniz:

ntp-wait || exit -1 
# i believe this would exit the script if it fails, but not sure of ntp-wait return codes, learn this first.

echo Time is synced, go ahead with backup
tar
rsync etc.
    
verilen cevap Anonymous 08.12.2015 08:55
0

Eğer sistemdeyseniz, bu komutu kullanabilirsiniz:

sudo systemctl restart ntp
# or
sudo systemctl restart ntp.service

Ve sonra saat 10-15 saniye içinde güncellenir.
Ubuntu arkadaşı 16.04 üzerinde test edildi.

    
verilen cevap TechJS 21.02.2018 19:01

Etiketlerdeki diğer soruları oku