Pertanyaan Bagaimana cara memaksa pembaruan jam menggunakan ntp?


Saya menjalankan Ubuntu pada sistem embedded berbasis ARM yang tidak memiliki baterai yang didukung RTC. Waktu bangun adalah suatu tempat selama tahun 1970. Jadi, saya menggunakan layanan NTP untuk memperbarui waktu ke waktu saat ini.

Saya menambahkan baris berikut ke /etc/rc.local mengajukan:

sudo ntpdate -s time.nist.gov

Namun, setelah memulai, masih membutuhkan beberapa menit hingga waktu diperbarui, selama periode itu saya tidak dapat bekerja secara efektif tar dan make.

Bagaimana saya bisa memaksa pembaruan jam pada waktu tertentu?


PERBARUI 1: Berikut ini (terima kasih kepada Eric dan Stephan) berfungsi dengan baik dari baris perintah, tetapi gagal memperbarui jam saat dimasukkan /etc/rc.local:

$ 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

Apa yang saya lakukan salah?


PERBARUI 2: Saya mencoba mengikuti beberapa saran yang datang sebagai tanggapan atas pembaruan pertama, tetapi sepertinya tidak ada yang benar-benar melakukan pekerjaan seperti yang diminta. Inilah yang saya coba:

  1. Ganti server menjadi us.pool.ntp.org
  2. Gunakan jalur eksplisit ke program
  3. Hapus ntp layanan sama sekali dan biarkan saja sudo ntpdate ... di rc.local
  4. Hapus sudo dari perintah di atas di rc.local

Menggunakan di atas, mesin masih dimulai pada tahun 1970. Namun, ketika melakukan ini dari baris perintah setelah masuk (via ssh), jam akan diperbarui segera setelah saya memanggil ntpdate.

Hal terakhir yang saya lakukan adalah menghapusnya dari rc.local dan melakukan panggilan ke ntpdate di saya .bashrc mengajukan. Ini memperbarui jam seperti yang diharapkan, dan saya mendapatkan waktu saat ini benar setelah command prompt tersedia.

Namun, ini berarti bahwa jika mesin dihidupkan dan tidak ada pengguna yang masuk, maka waktu tidak pernah mendapat pembaruan. Saya dapat, tentu saja, menginstal ulang ntp layanan jadi setidaknya jam diperbarui dalam beberapa menit dari startup, tetapi kemudian kita kembali di kuadrat 1.

Jadi, apakah ada alasan mengapa menempatkan ntpdate perintah masuk rc.local tidak melakukan tugas yang diperlukan, saat melakukannya di .bashrc bekerja dengan baik?


324
2018-02-13 21:58


asal


dari [di sini] [1]: ntpdate -s ntp.ubuntu.com     [1]: askubuntu.com/a/81301/130162 - 18446744073709551615
perhatikan tanda '-b' pada ntpdate. Dari halaman manual ntpdate: "Paksa waktu untuk melangkah menggunakan settimeofday () system call, daripada slewed (default) menggunakan panggilan sistem adjtime (). Opsi ini harus digunakan ketika dipanggil dari file startup pada saat boot." Banyak jawaban di bawah ini tidak memasukkannya, dan itu mungkin bagian dari masalah dalam membuat sesuatu bekerja. Pertimbangkan bahwa bendera '-B' itu menyebutkan bahwa offset lebih dari 128 ms dapat memakan waktu berjam-jam untuk menyinkronkan dengan menggunakan mekanisme default 'slew' - Matt S.
Tidak perlu digunakan sudo di file /etc/rc.locale .. semuanya sudah dijalankan sebagai root. - Soren A


Jawaban:


Mungkin itu ntp layanan sedang berjalan, itulah sebabnya ntpdate tidak dapat membuka soket (port 123 UDP) dan terhubung ke server ntp.

Coba dari baris perintah:

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

Jika Anda ingin memasukkan ini /etc/rc.local gunakan yang berikut ini:

( /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 )&

284
2018-02-13 23:13



Terima kasih. Bisakah Anda jelaskan mengapa Anda membutuhkan jalur eksplisit? - ysap
Saya benar-benar tidak tahu. :-) Saya mengalami kesulitan sekali mencoba berlari service dari rc.local dan cron tetapi saya berhasil memperbaikinya menggunakan /etc/init.d/xxx. Sebenarnya saya pikir Anda tidak harus memberikan jalan penuh ntpdateSaya suka menggunakan path lengkap dalam skrip hanya untuk memastikan file yang tepat akan ditemukan. - Eric Carvalho
OK, ini rupanya masalahnya. Sekarang jam sedang diperbarui segera setelah koneksi jaringan terbentuk. Terima kasih. - ysap
Saya menemukan bahwa us.pool.ntp.org lebih responsif. - ysap
Dengan -u pilihan, Anda tidak perlu menghentikan layanan ntp: sudo ntpdate -u time.nist.gov - Edward Anderson


Alih-alih ntpdate (yang mana tidak lagi digunakan), gunakan

sudo service ntp stop
sudo ntpd -gq
sudo service ntp start

Itu -gq memberitahu ntp daemon untuk mengoreksi waktu tanpa menghiraukan offset (g) dan segera keluar (q) setelah mengatur waktu.


427
2018-02-14 12:32



Terima kasih. Masih menunjukkan 1970 setelah perintah ini (w / sudo). Bacaan ntpd manpage, saya tidak yakin bagaimana ini memaksa pembaruan? - ysap
Opsi "-q" memberi tahu daemon NTP untuk memulai, mengatur waktu dan segera keluar. Opsi "-g" memungkinkan untuk mengoreksi perbedaan waktu yang lebih besar dari 1000 detik. Untuk jangka panjang, Anda cukup mengonfigurasi daemon NTP agar selalu berjalan. - tgharold
Jawaban ini harus menuju ke atas, karena sudah benar: ntpdate tidak lagi digunakan dan menginstalnya adalah ide yang buruk, karena konflik dengan ntp. Jika jam jauh, Anda perlu melakukan langkah manual ini karena jika tidak, ntp tidak akan mengubah jam Anda dan tidak akan memberi tahu Anda mengapa. - Liam
Untuk saya, sudo ntpd -gq tidak keluar! Saya pada 14.10 dan saya harus CTRL + C untuk melanjutkan ... atau sudah berapa lama? - Yanick Rochon
FYI, pada sistem saya (CentOS 6.6), saya perlu mengubah dua contoh sudo service ntp... untuk sudo service ntpd.... - rinogo


Gunakan sntp untuk mengatur waktu dengan segera. Sebagai contoh:

sudo sntp -s 24.56.178.140

Angka-angka setelah -s dapat berupa server waktu ntp, yang satu adalah NIST di Ft. Collins, Colorado.


49
2017-11-08 01:00



Itu berhasil! +1 - CappY
Ini bekerja ketika "sudo ntpd -gq" tidak. - Matt White
Saya tidak tahu berapa kali saya datang mencari jawaban ini. Bekerja setiap saat. - Chaos
tidak dapat menemukan paket sntp? - temple
apt-get install sntp / yum install sntp (ya berfungsi pada CentOS, RedHat, fedore juga) - ndemou


Seperti yang orang lain telah menunjukkan solusi terbaik adalah menginstruksikan ntpd untuk mengabaikan ambang panik, yang 1000 detik secara default. Anda dapat mengonfigurasi ambang panik dengan salah satu dari dua cara:

  • sunting /etc/default/ntp dan pastikan bahwa opsi -g ada.
  • edit /etc/ntp.conf dan tempat tinker panic 0 di atas

Sejauh ini pada dasarnya apa yang orang lain telah merekomendasikan tetapi ada satu langkah lagi yang saya pikir harus Anda ambil. Instal program hwclock palsu:

# 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.

Dengan palsu-hwclock terinstal mesin Anda tidak akan mulai berpikir itu adalah tahun 1970 sekali lagi. Ketika mesin Anda melakukan boot, ia akan mengatur jamnya ke cap jam palsu yang ditulis saat reboot / shutdown terakhir. Ini berarti Anda dapat memiliki jam yang agak tepat jika ada masalah jaringan saat Anda melakukan boot.


37
2018-04-03 22:11



-g tampaknya tidak melakukan apa pun untuk saya (di baris perintah, saya tidak punya /etc/default/ntp), tetapi menambahkan tinker panic 0 untuk ntp.conf bekerja - Dave Cousineau
@Sahuagin Saya tidak tahu harus memberi tahu Anda selain Anda memiliki paket ntp nonstandar. / etc / default / ntp adalah bagian dari paket dari Ubuntu: packages.ubuntu.com/xenial/amd64/ntp/filelist dan -g telah menjadi pilihan selama yang saya ingat. - dfc
maaf, saya kira saya tidak benar-benar di Ubuntu dan harus berpikir sedikit sebelum berkomentar. tinker panic 0 pasti tampaknya telah berhasil. - Dave Cousineau


ntpdate adalah program yang berbeda dari net dameon. NTPDate mungkin error saat boot karena ntpd berjalan di soket itu.

Dari baris perintah, jalankan

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

Anda juga dapat menghapus ntpd bersama-sama (apt-get remove ntp) dan menambahkan skrip cron untuk menggunakan ntpdate setiap jam atau lebih.

MEMPERBARUI

Layanan ntp mungkin tidak akan memiliki nilai yang berarti bagi Anda pada sistem ini, jadi hapus terlebih dahulu.

# sudo apt-get remove ntp

Sekarang tambahkan perintah:

ntpdate -sb time.nist.gov

untuk /etc/rclocal 

Reboot. Harus baik pada saat itu.


12
2018-02-13 23:07



jawaban diperbarui. - Stephan
Bukankah ntpdate sedang dihapus atau sesuatu? Juga, Jika saya memahami ini dengan benar, layanan ini menjalankan dan memelihara sinkronisasi jam lokal ke jam server - sehingga penyimpangan terikat. Jika Anda menghapus ntp dan menjalankan ntpdate satu kali, tidakkah ini akan terpengaruh oleh clock drifting ketika mesin menyala untuk waktu yang lama? - ysap
Stephan, silakan lihat pembaruan # 2 untuk pertanyaan itu. - ysap
Ya, ntpdate sedang dihapus. Penggunaan "ntpd-q" lebih disukai (kedua varian mengharuskan ntpd dihentikan terlebih dahulu). - tgharold


rdate -s tick.greyware.com

jika semua yang ingin Anda lakukan adalah mengatur jam sekali, sederhana


8
2018-02-26 22:57



Terima kasih. Saat ini saya tidak memiliki sistem untuk memeriksa perintah ini, tetapi jika Anda mengikuti diskusi dalam pertanyaan dan jawaban yang diterima, Anda akan melihat bahwa masalah itu sebenarnya tidak tersedianya jaringan pada saat menjalankan perintah pembaruan jam. - ysap
Ini memperbaiki masalah sinkronisasi waktu pada Raspberry Pi saya. Terima kasih. - Oliver Spryn


Cara yang benar untuk melakukan ini pada sistem Debian / Mint / Ubuntu (atau turunan Debian lainnya) adalah memiliki garis

NTPD_OPTS="-g"

dalam file

/etc/default/ntp

Ini memastikan bahwa ketika ntpd dimulai dari skrip /etc/init.d/ntp, ia dijalankan dengan opsi "-g", yaitu

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

untuk memungkinkan ntpd untuk memperbaiki waktu sistem ketika lebih dari 1000 detik, misalnya ketika waktu sistem adalah 1 Januari 1970 saat startup karena tidak ada perangkat keras RTC.


7
2018-04-03 11:20



Aku sudah memilikinya, tapi masih mengatakan 3AM di NY, padahal seharusnya jam 11 malam. - chovy
Saya juga sudah memiliki persis seperti itu /etc/default/ntp, tetapi waktu tidak disinkronkan. - Dawid Ferenczy


Coba gunakan -b pilihan untuk melangkah waktu.


4
2018-02-13 22:18



Ketika mencoba dari baris perintah, saya mendapatkan respons berikut: 1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting . Namun, saya berpikir bahwa saya mencoba ini sebelumnya rc.local tetapi itu tidak membantu. - ysap
Anda harus menghentikan layanan ntp terlebih dahulu sebelum Anda dapat menjalankannya ntpdate -b <ipaddress> - Wim Deblauwe


tlsdate menyetel jam lokal dengan menghubungkan secara aman dengan TLS ke server jarak jauh dan mengekstrak waktu jarak jauh dari jabat tangan aman. Tidak seperti ntpdate, tlsdate menggunakan TCP, misalnya menghubungkan ke HTTPS jarak jauh atau TLS  layanan diaktifkan, dan memberikan beberapa perlindungan terhadap musuh yang mencoba  Memberi Anda informasi waktu berbahaya.

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

4
2018-02-23 11:52