Cara mengekalkan masa yang betul, cara menggunakan NTP dan systemd untuk memastikan komputer anda segerak tanpa menyalahgunakan pelayan masa.
Linux pelik apabila memberitahu anda masa. Anda mungkin berfikir bahawa anda menggunakan arahan masa untuk memberitahu anda masa, tetapi bukan kerana masa hanyalah pemasa yang mengukur berapa lama proses telah berjalan. Untuk mendapatkan masa, anda perlu menjalankan arahan tarikh Jika anda ingin melihat lebih banyak tarikh, anda boleh menjalankan arahan cal. Cap masa pada fail juga boleh menjadi punca kekeliruan, kerana terdapat dua cara berbeza untuk memaparkannya, bergantung pada tetapan lalai pengedaran anda. Berikut ialah contoh daripada Ubuntu 16.04 LTS:
$ ls -l drwxrwxr-x 5 carla carla 4096 Mar 27 2017 stuff drwxrwxr-x 2 carla carla 4096 Dec 8 11:32 things -rw-rw-r-- 1 carla carla 626052 Nov 21 12:07 fatpdf.pdf -rw-rw-r-- 1 carla carla 2781 Apr 18 2017 oddlots.txt
Ada yang menunjukkan tahun, ada yang menunjukkan masa, cara ini menjadikan fail anda lebih mengelirukan. Lalai GNU adalah untuk memaparkan masa dan bukannya tahun jika fail anda berumur kurang daripada enam bulan. Saya fikir mungkin ada sebab untuk ini. Jika Linux anda seperti ini, cuba gunakan perintah ls -l --time-style=long-iso untuk memaparkan cap masa dengan cara yang sama, diisih mengikut abjad.
NTP – Protokol Masa Rangkaian, cara lama untuk memastikan masa komputer anda betul. ntpd ialah daemon NTP yang melaraskan masa komputer anda atas permintaan dengan menanya secara berkala pelayan masa awam. Ia adalah protokol yang ringkas dan ringan yang sangat mudah untuk disediakan menggunakan fungsi asasnya. systemd telah melampaui "melakukan kerja NTP" dengan menggunakan systemd-timesyncd.service, yang boleh digunakan sebagai pelanggan untuk ntpd.
Sebelum kita mula "berurusan" dengan NTP, luangkan sedikit masa untuk menyemak sama ada tetapan masa semasa adalah betul. Terdapat (sekurang-kurangnya) dua jam pada sistem anda: masa sistem - yang diuruskan oleh kernel Linux, dan yang kedua ialah jam perkakasan pada motherboard anda, yang juga dipanggil jam masa nyata (RTC). Apabila anda memasukkan BIOS sistem anda, anda boleh melihat masa pada jam perkakasan anda dan anda boleh menukar tetapannya. Apabila anda memasang Linux baharu, dalam beberapa pengurus masa grafik, anda akan ditanya sama ada untuk menetapkan RTC anda kepada zon waktu UTC (Coordinated Universal Time), kerana semua zon waktu dan waktu penjimatan siang adalah berdasarkan UTC. Anda boleh menggunakan arahan hwclock untuk menyemak:
$ sudo hwclock --debug hwclock from util-linux 2.27.1 Using the /dev interface to the clock. Hardware clock is on UTC time Assuming hardware clock is kept in UTC time. Waiting for clock tick... ...got clock tick Time read from Hardware Clock: 2018/01/22 22:14:31 Hw clock time : 2018/01/22 22:14:31 = 1516659271 seconds since 1969 Time since last adjustment is 1516659271 seconds Calculated Hardware Clock drift is 0.000000 seconds Mon 22 Jan 2018 02:14:30 PM PST .202760 seconds
Jam perkakasan berada pada waktu UTC menunjukkan bahawa RTC komputer anda menggunakan masa UTC, walaupun ia menukar masa itu kepada waktu tempatan anda. Jika ia ditetapkan kepada waktu tempatan, ia akan memaparkan jam Perkakasan adalah pada waktu tempatan. Anda sepatutnya mempunyai fail /etc/adjtime. Jika tidak, gunakan arahan berikut untuk menyegerakkan RTC anda dengan masa sistem:
$ sudo hwclock -w
Arahan ini akan menjana fail, kandungannya akan kelihatan seperti berikut:
$ cat /etc/adjtime 0.000000 1516661953 0.000000 1516661953 UTC
Cara systemd yang baru dicipta ialah menjalankan perintah timedatectl, yang tidak memerlukan keistimewaan root untuk dijalankan:
$ timedatectl Local time: Mon 2018-01-22 14:17:51 PST Universal time: Mon 2018-01-22 22:17:51 UTC RTC time: Mon 2018-01-22 22:17:51 Time zone: America/Los_Angeles (PST, -0800) Network time on: yes NTP synchronized: yes RTC in local TZ: no
RTC dalam TZ tempatan: tiada menunjukkan bahawa ia menggunakan masa UTC. Jadi bagaimana untuk menukar menggunakan waktu tempatan? Terdapat banyak cara untuk melakukan ini. Cara paling mudah ialah menggunakan alat konfigurasi grafik seperti YaST dari openSUSE. Anda juga boleh menggunakan timedatectl:
$ timedatectl set-local-rtc 0
Atau edit /etc/adjtime dan gantikan UTC dengan LOCAL.
systemd 提供了 systemd-timesyncd.service 客户端,它可以查询远程时间服务器并调整你的本地系统时间。在 /etc/systemd/timesyncd.conf 中配置你的(时间)服务器。大多数 Linux 发行版都提供了一个默认配置,它指向他们维护的时间服务器上,比如,以下是 Fedora 的:
[Time] #NTP= #FallbackNTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org
你可以输入你希望使用的其它时间服务器,比如你自己的本地 NTP 服务器,在 NTP= 行上输入一个以空格分隔的服务器列表。(别忘了取消这一行的注释)NTP= 行上的任何内容都将覆盖掉 FallbackNTP 行上的配置项。如果你不想使用 systemd 呢?那么,你将需要 NTP 就行。
配置你自己的局域网 NTP 服务器是一个非常好的实践,这样你的网内计算机就不需要不停查询公共 NTP 服务器。在大多数 Linux 上的 NTP 都来自 ntp 包,它们大多都提供 /etc/ntp.conf 文件去配置时间服务器。查阅 NTP 时间服务器池 去找到你所在的区域的合适的 NTP 服务器池。然后在你的 /etc/ntp.conf 中输入 4 - 5 个服务器,每个服务器用单独的一行:
driftfile /var/ntp.drift logfile /var/log/ntp.log server 0.europe.pool.ntp.org server 1.europe.pool.ntp.org server 2.europe.pool.ntp.org server 3.europe.pool.ntp.org
driftfile 告诉 ntpd 它需要保存用于启动时使用时间服务器快速同步你的系统时钟的信息。而日志也将保存在他们自己指定的目录中,而不是转储到 syslog 中。如果你的 Linux 发行版默认提供了这些文件,请使用它们。
现在去启动守护程序;在大多数主流的 Linux 中它的命令是 sudo systemctl start ntpd。让它运行几分钟之后,我们再次去检查它的状态:
$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================== +dev.smatwebdesi 192.168.194.89 3 u 25 64 37 92.456 -6.395 18.530 *chl.la 127.67.113.92 2 u 23 64 37 75.175 8.820 8.230 +four0.fairy.mat 35.73.197.144 2 u 22 64 37 116.272 -10.033 40.151 -195.21.152.161 195.66.241.2 2 u 27 64 37 107.559 1.822 27.346
我不知道这些内容是什么意思,但重要的是,你的守护程序已经与时间服务器开始对话了,而这正是我们所需要的。你可以去运行 sudo systemctl enable ntpd 命令,永久启用它。如果你的 Linux 没有使用 systemd,那么,给你留下的家庭作业就是找出如何去运行 ntpd。
现在,你可以在你的局域网中的其它计算机上设置 systemd-timesyncd,这样它们就可以使用你的本地 NTP 服务器了,或者,在它们上面安装 NTP,然后在它们的 /etc/ntp.conf 上输入你的本地 NTP 服务器。
Atas ialah kandungan terperinci Pastikan masa tepat Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!