Mengapa jam Ubuntu menjadi lebih lambat atau lebih cepat?

16

Jam Ubuntu mati sekitar setengah jam:

Waktu & Tanggal Ubuntu v. Waktu resmi AS

Di mana saya mulai memecahkan masalah ini?

Diduga sedang diatur "secara otomatis dari Internet". Bagaimana saya bisa memverifikasi bahwa "Internet" tahu jam berapa sekarang?

Detail

Ubuntu memiliki banyak waktu untuk berkomunikasi dengan Internet:

$ 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

Server waktu ini yang saya temukan melalui pencarian web tampaknya mengetahui waktu yang tepat:

$ 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

Tidak ada kesalahan yang dilaporkan terkait dengan NTP:

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

Setelah mem-boot ulang, waktu dikoreksi secara otomatis dan yang berikut muncul di /var/log/syslog:

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

Log offset yang dilaporkan oleh ntpdate mengungkapkan bahwa jam melayang sekitar 9 detik setiap jam:

$ 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))
'

Waktu jam v. Server waktu diimbangi

ændrük
sumber
Latar belakang: ntp adalah alat yang hebat untuk menjaga waktu yang akurat . Tapi, butuh waktu yang terbatas (beberapa menit, atau bahkan berjam-jam) untuk sampai ke waktu saat ini dari waktu yang salah. Ini terkait dengan ntp-server (pilihan Anda) dan latensi Internet Anda untuk ini. @ Floyd telah menguraikan cara pintas untuk dengan cepat memaksa waktu yang benar. Tetapi waktu yang lebih baik (dan penggunaan ntp ) membutuhkan pemilihan ntp-server yang cermat.
david6
Mobil saya melakukan ini ... membuat saya gila ... Saya harus memutar kembali waktu 20 menit setiap minggu ...
TheXed
Hal pertama yang saya coba lakukan adalah mengganti baterai pada motherboard ....
TheXed

Jawaban:

17

ntp berhasil menjaga komputer Anda tetap pada waktu yang tepat, dan melakukan itu tanpa pernah menjalankannya mundur - yang akan menjadi hal yang buruk untuk beberapa program yang mungkin sedang Anda jalankan.

Itu tidak hanya mengatur waktu, tetapi membuat penyesuaian terus menerus tentang bagaimana komputer Anda menjaga waktu sehingga waktunya tidak hanya tepat pada satu waktu, tetapi tetap dekat dengan waktu nyata (dalam lusinan milidetik, bukan lusinan menit) . Ini menyesuaikan kedua fase (waktu) dan kecepatan (seberapa cepat jam "kutu"). ntp tidak pernah membuat jam berjalan mundur. Butuh waktu lama untuk menetapkan seberapa cepat untuk menandai jam setelah reboot, jadi ntp melacak penyimpangan dalam file bernama /var/lib/ntp/ntp.drift. Karena Anda tidak menjalankan ntp semua ini tidak terjadi.

ntp tidak sepopuler dulu karena tidur laptop dan desktop, dan mesin virtual menghentikannya dari menjalankan beberapa waktu. Ini dirancang untuk berjalan sesekali pada jadwal sendiri di komputer yang berjalan sepanjang waktu, dan di dunia nyata di mana waktu terus menerus. Itu mungkin mengapa itu tidak diinstal secara default di workstation modern. [Untuk Vmware, lihat ini]

Alih-alih, ntpdate dijalankan saat antarmuka jaringan ditampilkan. Ketika laptop tidur dibangun kembali membangun kembali koneksi jaringan, ntpdate dijalankan, dan waktunya kembali benar. Jika jam perangkat keras mesin cukup akurat, dan jaringan sering naik turun, itu umumnya cukup baik bagi kebanyakan orang.

Untuk beberapa alasan stock ntpdate tidak selalu berjalan. Gunakan ntpdate-debian sebagai gantinya dalam kasus ini. Sintaks untuk for.mer adalah sesuatu seperti ntpdate ntp.ubuntu.com , untuk yang terakhir itu adalah ntpdate-debian

Dengan tidak adanya salah satu dari hal-hal itu, maka ntp adalah cara yang lebih baik untuk menjaga waktu.

Sistem dirancang untuk mengambil pengatur waktu sesekali dan memperbarui idenya tentang waktu setiap interupsi. Selama timer perangkat keras berjalan ke spec. waktu tidak melayang terlalu banyak. Jika timer perangkat keras tidak, waktu akan melayang lebih banyak (semua jam seperti itu akan melayang beberapa, karena alasan yang sama jam tangan Anda atau jam yang dikendalikan baterai akan. Jam yang terhubung ke dinding disinkronkan dengan waktu berdasarkan frekuensi dan fase yang disimpan oleh perusahaan listrik Anda).

Sebagian besar pengatur waktu komputer dikendalikan oleh rangkaian osilator yang dikontrol kristal pada sirkuitnya yang terintegrasi. Meskipun kristal, mereka berjalan lebih cepat dan lebih lambat tergantung pada lingkungan, kebanyakan suhunya. Jika Anda tidak menginstal perangkat lunak sinkronisasi waktu, kami tidak tahu, jam sistem Anda tidak aktif.

Jika Anda menjalankan ntp selama satu atau dua hari, ia akan menyimpan informasi di /var/lib/ntp/ntp.drift yang akan menunjukkan berapa banyak yang harus disesuaikan dengan laju di mana waktu sistem operasi Anda maju per interupsi untuk cocokkan laju jam perangkat keras Anda dengan waktu nyata yang didapat melalui internet. Menjaga file tetap sama dan baru memulai dan menghentikan ntp setelah satu menit setelah itu (dengan asumsi Anda menyimpan file /var/lib/ntp/ntp.drift tidak berubah) mungkin melakukan banyak hal untuk memperbaiki hal ini jika clock bias ntp tetap ada setelah ntp berakhir. Saya tidak yakin dengan detail ini.

Saya menduga nilai ntp akan disimpan di /var/lib/ntp/ntp.drift jauh berbeda dari milik saya.

Namun, jika mesin ini terus berjalan sepanjang waktu, hal terbaik yang harus dilakukan adalah menginstal ntp dan membiarkannya melakukan hal tersebut. Lihat jawaban lain untuk detail tentang cara mendapatkan waktu yang tepat sebelum memulainya. Saya menjalankan ntp di desktop saya dan ntpdate di laptop saya.

Alternatif yang mungkin menarik, adjtimex, disebutkan dalam jawaban ini oleh nealmcb.

Jika sistem Anda tidak terus berjalan sepanjang waktu, menjalankan ntpdate saat boot sepertinya pilihan yang bagus.

Peringatan beberapa perangkat lunak dapat menjadi aneh jika waktu komputer berjalan mundur. Menjalankan ntpdate setelah boot dapat menyebabkan ini terjadi.

Satu gotcha, itu bisa menjadi masalah: Seingat saya ntp mengharapkan waktu untuk tidak terlalu jauh. Jika ya, mencoba bertindak konservatif, ntp tidak akan menyesuaikan waktu sama sekali. Jika Anda berada dalam situasi ini, masuk akal untuk melakukan keduanya - jalankan ntpdate saat boot untuk mendapatkan waktu yang diinisialisasi ke waktu yang tepat, dan kemudian biarkan ntp dijalankan agar tetap berjalan untuk memberikan ketepatan waktu yang akurat. Khususnya baterai motherboard yang buruk dapat menyebabkan kesalahan ini, seperti dapat mem-boot komputer yang sudah lama mati.

John S Gruber
sumber
Penjelasan hebat John! Hanya satu hal kecil - tanggal / waktu pada kebanyakan motherboard dikelola oleh RTC (real time clock) yang terpisah, yang menggunakan kristal 32,768 KHz sendiri (karena membagi frekuensi dengan 2 ^ 15 memberi Anda tepat satu detik), dan FSB clock, yang biasanya di 100+ MHz, tidak ada hubungannya dengan tanggal-waktu - jika demikian over / underclocking akan mengacaukannya - sebaliknya itu biasanya kristal melayang di modul / sirkuit RTC. Bisakah Anda melihat masalah ini dan membalas komentar dan / atau mengedit jawaban Anda untuk mencerminkan hal ini?
ish
Saya akan melakukan keduanya! Saya telah menghapus menyebutkan over-clocking karena saya pikir itu tidak mungkin, seperti yang saya katakan. RTC hanya digunakan untuk mengatur waktu saat boot. Seperti komentar Anda menyebutkan, itu hanya akurat hingga 1 detik. The man rtcpage mengatakan: "RTCs tidak harus bingung dengan jam sistem, yang merupakan perangkat lunak jam dikelola oleh kernel dan digunakan untuk mengimplementasikan gettimeofday (2) ..." Tidak tahu apakah jam sistem ini terkait dengan jam FSB . Melihat konfigurasi kernel, kernel i386 akurat terbaru Ubuntu memiliki jam sistem yang diperbarui pada 250Hz. Terima kasih atas komentarnya!
John S Gruber
@izx Pada sistem laptop saya kernel menggunakan HPET sebagai sumber dayanya. Ini dapat dikonfigurasi. Wikipedia mengatakan bahwa ini adalah bagian dari fungsi southbridge. Saya tidak tahu apa yang dikatakan tentang hubungannya dengan FSB, tetapi saya mengumpulkan FSB adalah bagian dari northbridge.
John S Gruber
Terima kasih, John dan @izx. Saya senang dengan kelengkapan ini. izx, saya harap Anda tidak akan tersinggung bahwa saya telah menandainya sebagai diterima. Saya pikir ini akan menjadi bacaan yang lebih baik untuk pengunjung masa depan.
ændrük
@ ændrük: tidak ada masalah sama sekali, seperti yang Anda lihat, saya sangat menghargai ketelitian John.
ish
12

- Biasanya waktu hanya disinkronkan sekali setiap boot atau bangun-dari-tidur

Jadi masalahnya adalah server waktu default Ubuntu (apakah itu?) Memiliki waktu yang salah, atau Ubuntu tidak mengatur waktu secara otomatis dari Internet.

Tidak, server waktu Ubuntu benar, dan pengaturan waktu secara otomatis darinya.

Masalahnya adalah bahwa biasanya terjadi hanya sekali pada setiap bootup (atau lebih tepatnya, setiap kali antarmuka jaringan dinyalakan - baik dari shutdown, sleep atau hibernasi). Berdasarkan waktu aktif Anda, aman untuk mengatakan itu tidak disinkronkan dalam lebih dari seminggu. Dan jam sistem Anda berjalan sedikit cepat untuk beberapa alasan.

- Mengatur cronpekerjaan per jam untuk menyinkronkan jika Anda tidak sering reboot, atau server / desktop Anda tidak pernah tidur

Taruhan terbaik Anda adalah mengatur pekerjaan-cron, saya akan mengatakan setiap jam jika Anda ingin waktu yang sangat tepat. Cara termudah untuk melakukannya adalah:

  • sudo editor /etc/cron.hourly/ntpsync

Tambahkan baris berikut:

#! / bin / bash

ntpdate ntp.ubuntu.com #atau server pilihan Anda
  • simpan, keluar dan sudo chmod +x /etc/cron.hourly/ntpsync

Anda bisa memasukkan ini ke dalam /etc/cron.dailyjika Anda mau, sekali sehari.

ish
sumber
Spot on. Saya menerima ini karena menjawab dengan benar pertanyaan saya mengapa jam itu salah, tapi saya skeptis dengan solusi itu. Saya harus belajar sedikit tentang ini sebelum saya memutuskan tindakan apa yang harus diambil.
ændrük
Jika Anda mengatur server pilihan Anda di file ntp.conf, apakah Anda perlu mendefinisikannya kembali di sini?
Snekse
6

Ini dapat terjadi jika Anda menginstal daemon waktu ntp dan waktu pada mesin Anda terlalu jauh untuk dikoreksi dengan cepat.

Untuk memperbaikinya buka terminal dan lakukan

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

Apa yang dilakukan:

  1. Hentikan daemon ntp
  2. Atur jam
  3. Waktu sekarang seharusnya benar
  4. restart ntp daemon

Jika Anda belum menginstal ntp, lakukan dengan

  sudo apt-get install update

Pembaruan: Menggunakan ntpdate dalam pekerjaan cron, seperti yang telah direkomendasikan di sini, mengarah ke masalah halus.

Ntpdate akan membuat waktu 'melompat' setiap jam atau lebih. Menggunakan ntp menghindari masalah ini, karena itu akan menyesuaikan waktu dengan mengubah jam. Selain itu, saat memilih server ntp di lingkungan tersebut memberikan akurasi yang lebih tinggi, itu tidak perlu. File konfigurasi ntp default memiliki beberapa server di dalamnya dan server secara otomatis mengkompensasi keterlambatan.

Intinya: - gunakan ntp - jika Anda jauh dari, shutdown ntp, jalankan ntpdate sekali dan restart ntp.

Floyd
sumber
/etc/init.d/ntptidak ada. Ini adalah instalasi Ubuntu 12.04 yang cukup baru dan saya belum dengan sengaja mengubah apa pun yang berkaitan dengan waktu.
ændrük
Maka saya sarankan menginstalnya.
Floyd
Sebisa mungkin, saya lebih suka tidak ikut campur dengan konfigurasi dan layanan di seluruh sistem. Jika file ini tidak diinstal secara default, mengapa pengaturan waktu & tanggal default harus berfungsi?
ændrük
1
Apakah waktunya benar setelah reboot? Saya menduga bahwa pembaruan jam hanya menjalankan ntpdate sekali. Beberapa sistem memiliki masalah bahwa jam sistem yang dikelola oleh linux berjalan terlalu cepat. Saya telah memilikinya khususnya dengan sistem yang berjalan sebagai mesin virtual.
Floyd
1
Jika masalah ini tetap ada setelah reboot atau shutdown, itu mungkin sel CMOS Anda mati di MOBO.
atenz
1

Saya memiliki masalah yang sama dan itu disebabkan oleh sesuatu di firewall. Pada akhirnya saya menambahkan pekerjaan cron per jam tetapi menambahkan -uargumen untuk ntpdatemembuatnya menggunakan port tidak ada standar.

Masalah saya disebabkan oleh Ubuntu tidak benar-benar memeriksa apakah ntpdateberfungsi tetapi secara otomatis dengan asumsi bahwa itu akan berhasil.

Axel
sumber