Paksa systemd timesyncd untuk menyinkronkan waktu dengan server NTP segera

16

Saya telah mengkonfigurasi systemd timesyncd untuk mendapatkan waktunya dari server NTP:

/etc/systemd/timesyncd.conf > NTP=ca.pool.ntp.org
systemctl restart systemd-timesyncd.service 
timedatectl set-ntp true

Statusnya adalah sebagai berikut:

$ timedatectl status
...
Network time on: yes
NTP synchronized: no

Seperti yang disiratkan oleh output, waktu belum disinkronkan. Dapatkah seseorang tolong bantu saya dengan pertanyaan-pertanyaan berikut?

  • Berapa lama untuk timesyncd untuk disinkronkan dengan NTP? Pada interval berapa ia melakukan itu, di mana saya bisa memeriksa dan mengubahnya?
  • Dalam kasus mendesak: Dapatkah saya hanya mengatur waktu secara manual atau bisakah saya memaksa timesyncd untuk segera menyinkronkan dengan server NTP?
perwujudan
sumber

Jawaban:

10

Untuk menggunakan implementasi NTP yang sebenarnya, Anda perlu menginstal dan mengonfigurasinya, chronyatau mungkin ntpd. Lakukan jika Anda memerlukan pemantauan kinerja waktu. Saya akan menganggap chrony.

Tambahkan iburstke poolatau server baris Anda di konfigurasi Anda untuk mempercepat beberapa paket awal. Masih butuh beberapa menit untuk stabil, bersabarlah.

chronyc trackingakan menampilkan offset saat ini. Punya gagasan tentang apa kebutuhan Anda, akurasi satu detik dapat dengan mudah mentolerir puluhan milidetik offset.

chronyc makestepakan segera melakukan penyesuaian. Biasanya tidak perlu.


timesyncdadalah klien SNTP yang dapat mengatur waktu, tetapi tidak mendisiplinkannya secara bertahap dan terus menerus, atau memfilter server NTP jarak jauh berdasarkan kualitas . (Ini juga tidak dapat berbicara dengan hardware waktu atau PTP, hanya protokol NTP.) Sedikit lebih baik daripada diulang ntpdate, yang saya maksud jam tidak terlalu baik. Secara pribadi, saya menggantinya di sebagian besar server.

Tentang satu-satunya cara untuk mengatur waktu dengan timesyncd adalah secara manual: timedatectl set-time "2019-01-15 00:40:16". Itu tidak memiliki sarana yang kuat untuk mendisiplinkan dan memantau jam. Statistik NTP dasar via timedatectl timesync-statusadalah hal yang relatif baru, saya tidak berpikir bahwa opsi tersedia di Red Hat 7 atau Ubuntu 18.04.

systemd mendefinisikan "disinkronkan" menjadi jika NTP pernah digunakan untuk memberitahu Linux untuk menyesuaikan jam. Secara khusus, jika panggilan disiplin kernel adjtimex () dikembalikan tanpa kesalahan, dan bukan keadaan awal. Lihat kode sumber, systemd / src / basic / util-util.c.

John Mahowald
sumber
Terima kasih atas jawaban Anda, John. Jadi sebenarnya saya bisa menonaktifkan systemd-timesyncd dan hanya menggunakan chrony? Saya tidak yakin saya mengerti mengapa systemd memiliki opsi NTP dan disebut timeSYNCd jika tidak dapat menyinkronkan waktu sebenarnya? "Systemd mendefinisikan" disinkronkan "menjadi jika adjusterex panggilan kernel NTP () dikembalikan tanpa kesalahan, dan bukan keadaan awal" - ini tidak terlalu jelas bagi saya.
manifestor
1
@chevallier systemd-timesyncd sangat sederhana, dan itu cukup baik untuk kasus yang paling umum, misalnya server dengan jam waktu nyata yang diharapkan akan berjalan dan pada jaringan 24x7. Milik Anda bukan kasus umum, jadi sebaiknya Anda tidak menggunakannya. chrony jauh lebih baik dalam menangani gangguan konektivitas jaringan dan dimatikan untuk waktu yang lama (misalnya laptop) atau tidak memiliki RTC sama sekali (misalnya perangkat yang disematkan).
Michael Hampton
1
timesyncd adalah klien SNTP, sehingga mengatur waktu tanpa mendisiplinkannya dengan benar. Yang bagus untuk persyaratan akurasi kasar. Jika Anda ingin mengukur kinerja waktu, atau menunggu hingga disinkronkan, gunakan NTP lengkap seperti chrony atau ntpd.
John Mahowald
11

Tanpa menginstal paket lagi ... Matikan NTP, atur waktu secara manual agar cukup dekat , nyalakan kembali NTP:

Setel Layanan NTP tidak aktif

$ timedatectl set-ntp false

Atur waktu secara manual

Ya, itu menyedihkan tetapi itu berhasil dan Anda tidak perlu repot-repot menginstal apa pun dan membuatnya bekerja. Dapatkan perkiraan waktu LOKAL dari jam dinding, ponsel Anda, Internet. Tidak harus sempurna karena kami akan mengaktifkan kembali ntp sebentar lagi ...

$ sudo timedatectl set-time "2019-06-22 13:41:00"

Setel layanan NTP aktif

$ sudo timedatectl set-ntp true

Tunggu

john@mybox:~$ timedatectl
               Local time: Sat 2019-06-22 13:49:53 AEST
           Universal time: Sat 2019-06-22 03:49:53 UTC
                 RTC time: Sat 2019-06-22 03:49:54
                Time zone: Australia/Sydney (AEST, +1000)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

"Jam sistem disinkronkan: tidak" akan berubah menjadi "ya" bila sudah cukup disesuaikan untuk dianggap 'sinkron'.

Penyelesaian masalah

$ cat /etc/systemd/timesyncd.conf
[Time]
NTP=pool.ntp.org

$ timedatectl timesync-status
       Server: 13.210.208.89 (au.pool.ntp.org)
Poll interval: 8min 32s (min: 32s; max 34min 8s)
 Packet count: 0

$ grep systemd-timesyncd /var/log/syslog | tail
Jun 22 14:13:09 meebox systemd-timesyncd[8333]: Timed out waiting for reply from 103.214.220.220:123 (au.pool.ntp.org).

Paket ntp saya diblokir oleh firewall perusahaan.

John Mee
sumber
Menginstal layanan waktu-sinkronisasi lain juga merupakan ide pertama saya, tetapi itu hanya solusi. Saya sedang mencari perbaikan nyata. Itu jawabannya. Berhasil. Terima kasih :-)
Ingo