Ubuntu'nun saati neden yavaşlıyor veya hızlanıyor?


16

Ubuntu'nun saati yarım saat kadar kapalı:

Ubuntu Saat ve Tarihi / Resmi ABD saati

Bu sorunu gidermeye nereden başlayabilirim?

İddiaya göre "otomatik olarak internetten" ayarlanıyor. "İnternet" in saatin kaç olduğunu bildiğini nasıl doğrulayabilirim?

ayrıntılar

Ubuntu'nun İnternet ile iletişim kurmak için bolca zamanı vardı:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

Bir web aramasıyla bulduğum bu zaman sunucusu doğru zamanı biliyor gibi görünüyor:

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

NTP ile ilgili bildirilen hata yok:

$ grep -ic ntp /var/log/syslog
0

Yeniden başlatıldıktan sonra, zaman otomatik olarak düzeltildi ve aşağıdakiler belirdi /var/log/syslog:

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

Ntpdate tarafından bildirilen ofset günlüğü, saatin her saat yaklaşık 9 saniye sürüklendiğini gösterir:

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

Saat zamanı - Zaman sunucusu ofseti


Arka Plan: ntp , doğru zamanı korumak için harika bir araçtır . Ancak, yanlış süreden geçerli saate ulaşmak için sınırlı bir süre (birkaç dakika, hatta saat) gerekir. Bu, ntp sunucuları (seçiminiz) ve bunlara ilişkin İnternet gecikmenizle ilgilidir. @Floyd , zamanı doğru bir şekilde zorlamak için bir kısayol belirlemiştir. Ancak daha iyi zaman (ve ntp kullanımı ) ntp sunucularının dikkatli seçilmesini gerektirir.
david6

Arabam bunu yapıyor ... beni çılgına
çeviriyor

Yanıtlar:


17

ntp , bilgisayarınızın doğru zamanda ayarlanmasını sağlar ve bunu geriye doğru çalıştırmadan yapar - bu, bazı programlar için kötü bir şey olabilir.

Sadece zamanı ayarlamakla kalmaz, aynı zamanda bilgisayarınızın zaman tutma biçiminde sürekli ayarlamalar yapar, böylece zamanı sadece bir anda doğru olmaz, aynı zamanda gerçek zamana yakın kalır (düzinelerce milisaniye içinde, onlarca dakika değil) . Hem fazı (zamanı) hem de hızı (saatin "keneler" ne kadar hızlı) ayarlar. ntp hiçbir zaman saati geriye doğru çalıştırmaz. Yeniden başlatma sonrasında saati ne kadar hızlı işaretleyeceğini belirlemek uzun zaman alabilir, bu nedenle ntp /var/lib/ntp/ntp.drift adlı bir dosyadaki sapmayı izler. Ntp çalıştırmadığınız için bunların hiçbiri gerçekleşmez.

ntp bir zamanlar olduğu kadar popüler değil çünkü uykudaki dizüstü bilgisayarlar ve masaüstü bilgisayarlar ve sanal makineler bir süre çalışmasını durduruyor. Her zaman çalışan bir bilgisayarda ve zamanın sürekli olduğu gerçek dünyada her seferinde kendi programında çalışmak üzere tasarlanmıştır. Muhtemelen bu yüzden modern iş istasyonuna varsayılan olarak yüklenmez. [Vmware için buna bakın ]

Bunun yerine ntpdate , ağ arayüzü açıldığında çalıştırılır. Uyuyan bir dizüstü bilgisayar uyandığında ağ bağlantısını yeniden kurar, ntpdate çalıştırılır ve zaman tekrar doğrudur. Makinenin donanım saati oldukça doğruysa ve ağ oldukça sık sık aşağı yukarı getirilirse, bu genellikle çoğu insan için yeterlidir.

Bazı nedenlerden dolayı hisse senedi ntpdate her zaman çalışmaz. Kullanım ntpdate-debian yerine bu durumda. For.mer için sözdizimi ntpdate ntp.ubuntu.com gibi bir şeydir , ikincisi için ntpdate-debian

Bunlardan birinin yokluğunda, ntp zaman tutmanın daha iyi bir yoludur.

Sistemler sık ​​sık zamanlayıcı kesmesi yapmak ve her kesilme zamanı fikrini güncellemek için tasarlanmıştır. Donanım zamanlayıcısı spec. zaman çok fazla kaymıyor. Donanım zamanlayıcısı değilse, zaman daha fazla sürüklenir (tüm bu saatler bir miktar sürüklenir, aynı nedenle kol saatiniz veya pil kontrollü saatiniz olacaktır. Duvara takılan saatler, tarafından tutulan frekans ve faz ile zamana senkronize edilir. güç şirketiniz).

Çoğu bilgisayar zamanlayıcısı, entegre devreleri üzerinde kristal kontrollü bir osilatör devresi tarafından kontrol edilir. Kristale rağmen, çoğunlukla sıcaklığa, çevreye bağlı olarak daha hızlı ve daha yavaş çalışırlar. Yüklemediğimiz bir zaman senkronizasyon yazılımı yoksa, sisteminizin saatinin kapalı olduğunu söyleyebilirim.

Ntp'yi bir veya iki gün boyunca çalıştırırsanız , /var/lib/ntp/ntp.drift dosyasında, işletim sistemi sürenizin kesme başına ilerleme hızını ne kadar ayarlamak gerektiğini gösteren bilgileri depolar. donanım saat hızınızı internet üzerinden gerçek zamanlı olarak eşleştirin. Dosyayı aynı tutmak ve bundan sonra bir dakika sonra ntp'yi başlatmak ve durdurmak (/var/lib/ntp/ntp.drift dosyasını değiştirmediğinizi varsayarak) saat yanlılığı ntp kümeleri sonra kalırsa bunu düzeltmek için çok şey yapabilir ntp biter. Bu detaydan emin değilim.

Ben değeri şüpheli ntp /var/lib/ntp/ntp.drift saklamak istiyorum benden çok farklıdır.

Bu makine her zaman çalışmaya devam ederse, yapılacak en iyi şey ntp'yi yüklemek ve işini yapmasına izin vermektir. Başlamadan hemen önce zamanı bulmayla ilgili ayrıntılar için diğer yanıtlara bakın. Masaüstümde ntp ve dizüstü bilgisayarımda ntpdate çalıştırıyorum .

Bu cevapta nealmcb tarafından ilginç bir olası alternatif olan adjtimex belirtilmiştir .

Sisteminiz sürekli çalışmaya devam etmezse , ntpdate'i önyükleme zamanında çalıştırmak iyi bir seçenek gibi görünür.

Bilgisayarların geriye doğru gitmesi durumunda bazı yazılımların çıldırması konusunda uyarı . Önyüklemeden sonra ntpdate komutunun çalıştırılması bu durumun oluşmasına neden olabilir.

Bir sorun, bu bir sorun olabilir: hatırladığım gibi ntp zaman çok uzakta olmamasını bekliyor. Öyleyse, muhafazakar davranmaya çalışmak, ntp zamanı hiç ayarlamaz. Bu durumda, her ikisini de yapmak mantıklıdır - doğru zamanda başlatılan zamanı almak için önyükleme sırasında ntpdate'i çalıştırın ve ardından doğru zaman işleyişi sağlamak için ntp'nin çalışmasını sağlayın. Özellikle kötü bir anakart pili, uzun süre kapalı olan bir bilgisayarı önyüklemek gibi bu hataya neden olabilir.


Büyük açıklama John! Sadece küçük bir şey - çoğu anakarttaki tarih / saat, kendi 32.768 KHz kristalini kullanan ayrı bir RTC (gerçek zamanlı saat) tarafından korunur (çünkü bu frekansı 2 ^ 15'e bölmek size tam bir saniye verir) ve FSB Genellikle 100+ MHz'de olan saat, tarih-saat tutma ile ilgisi yoktur - eğer öyleyse aşırı / overclock bunu bozar - bunun yerine genellikle RTC modülünde / devresinde kristal kayması olur. Bu sorunu arayabilir ve yorumu yanıtlayabilir ve / veya cevabınızı bunu yansıtacak şekilde düzenleyebilir misiniz?
ish

İkisini de yapacağım! Dediğim gibi, imkansız olduğunu düşündüğüm için over-clocking sözünü kaldırdım. Ancak RTC sadece önyükleme sırasında zamanı ayarlamak için kullanılır. Yorumunuzda belirtildiği gibi, sadece 1 saniye doğrudur. man rtcSayfanın mesajı: "RTCS çekirdek tarafından korunur ve gettimeofday uygulamak için kullanılan bir yazılım saat olduğunu sistem saati ile karıştırılmamalıdır (2) ..." sistem saatinin FSB ilgili olup olmadığını bilmiyorum . Çekirdek yapılandırmasına bakıldığında, en son Ubuntu hassas i386 çekirdeği, sistem saatinin 250Hz'de güncellenmesini sağlar. Yorum için teşekkürler!
John S Gruber

@izx Dizüstü bilgisayar sistemimde çekirdek HPET'i saat kaynağı olarak kullanıyor. Yapılandırılabilir. Wikipedia bunun güney köprüsü işlevinin bir parçası olduğunu söylüyor. FSB ile ilişkisi hakkında ne söyledi bilmiyorum, ama FSB'nin kuzey köprüsünün bir parçası olduğunu düşünüyorum.
John S Gruber

Teşekkürler John ve @izx. Bunun kapsamlılığından çok memnunum. izx, umarım kişisel olarak kabul etmezsiniz. Bence gelecek ziyaretçiler için daha iyi okunacak.
ændrük

@ ændrük: Hiç sorun değil, gördüğünüz gibi John'un titizliğini çok takdir ettim.
ish

12

- Genellikle zaman, her önyükleme veya uyku modundan çıkma sırasında yalnızca bir kez senkronize edilir

Bu nedenle, sorun Ubuntu'nun varsayılan zaman sunucusunun (nedir?) Yanlış zamana sahip olduğu veya Ubuntu'nun zamanı otomatik olarak İnternet'ten ayarlamaması gibi görünüyor.

Hayır, Ubuntu'nun zaman sunucusu doğrudur ve zamanı otomatik olarak ayarlamaktadır.

Sorun genellikle, her önyüklemede yalnızca bir kez gerçekleşir (veya daha kesin olmak gerekirse, bir ağ arabirimi her açıldığında - kapatma, uyku veya hazırda bekletme modundan). Çalışma sürenize bağlı olarak, bir haftadan fazla bir sürede senkronize edilmediğini söylemek güvenlidir. Ve sistem saatiniz bir nedenden dolayı biraz hızlı çalışıyor.

- cronSık sık yeniden başlatmazsanız veya sunucunuz / masaüstünüz asla uyku moduna geçmezse senkronize etmek için saatlik bir iş ayarlayın

En iyi bahsiniz bir cron işi kurmaktır, süper kesin zaman istiyorsanız saatlik olarak söyleyebilirim. Bunu yapmanın en kolay yolu:

  • sudo editor /etc/cron.hourly/ntpsync

Aşağıdaki satırları ekleyin:

#! / Bin / bash

ntpdate ntp.ubuntu.com # veya sunucu seçiminiz
  • kaydet, çık ve sudo chmod +x /etc/cron.hourly/ntpsync

Bunu, /etc/cron.dailygünde bir kez isterseniz, yerine koyabilirsiniz .


Açık. Bunu , saatin neden yanlış olduğu sorusunu doğru bir şekilde cevapladığım için kabul ediyorum , ancak bu geçici çözümden şüpheliyim. Hangi eyleme geçeceğime karar vermeden önce bu konuda biraz daha öğrenmem gerekecek.
ændrük

İstediğiniz sunucuyu ntp.conf dosyasında ayarlarsanız, burada yeniden tanımlamanız gerekir mi?
Snekse

6

Bu, ntp zaman arka plan programını yüklediyseniz ve makinenizdeki zaman hızlı bir şekilde düzeltilemeyecek kadar uzaksa olabilir.

Düzeltmek için bir terminal açın ve

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

Bu ne yapar:

  1. Ntp arka plan programını durdur
  2. Saati ayarla
  3. Zaman şimdi doğru olmalı
  4. ntp arka plan programını yeniden başlat

Ntp kurulu değilse ile yapın

  sudo apt-get install update

Güncelleme: ntpdate'i burada önerildiği gibi bir cron işinde kullanmak, ince sorunlara yol açar.

Ntpdate, zamanı saatte bir 'zıplayacaktır'. Ntp kullanmak bu sorunu önler, çünkü saati sararak zaman ayarlayacaktır. Ayrıca, mahallede bir ntp sunucusu seçerken daha da yüksek doğruluk sağlarken, bu gerekli değildir. Varsayılan ntp yapılandırma dosyasının içinde birkaç sunucu vardır ve sunucu otomatik olarak gecikmeleri telafi eder.

Alt satır: - ntp kullanın - uzaksanız, ntp'yi kapatın, ntpdate'i bir kez çalıştırın ve ntp'yi yeniden başlatın.


/etc/init.d/ntpmevcut değil. Bu oldukça yeni bir Ubuntu 12.04 kurulumu ve zamanla ilgili hiçbir şeyi kasten değiştirmedim.
ændrük

Sonra yüklemenizi öneririm.
Floyd

Mümkün olduğunca, sistem çapında yapılandırma ve hizmetlerle uğraşmamayı tercih ederim. Bu dosya varsayılan olarak yüklenmezse, varsayılan Saat ve Tarih ayarlarının çalışması neden gereklidir?
ændrük

1
Yeniden başlatmanın ardından saat doğru mu? Saat güncellemesinin sadece bir kez ntpdate çalıştırdığından şüpheleniyorum. Bazı sistemlerde linux tarafından tutulan sistem saatinin çok hızlı çalışması sorunu vardır. Özellikle sanal makine olarak çalışan sistemlerde bunu yaşadım.
Floyd

1
Yeniden başlatma veya kapatma işleminden sonra bu sorun devam ederse, CMOS hücreniz MOBO'da ölmüş olabilir.
atenz

1

Benzer bir sorunum vardı ve bunun nedeni güvenlik duvarındaki bir şeydi. Sonunda saatlik cron işini ekledim ama standart bir bağlantı noktası kullanmamak için -uargümanı ekledim ntpdate.

Benim sorunum Ubuntu aslında çalışıp ntpdateçalışmadığını kontrol değil, otomatik olarak işe yarayacağını varsayarak neden oldu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.