Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีซิงค์เวลา Linux กับ NTP Server

นาฬิกาคอมพิวเตอร์ไม่สมบูรณ์แบบ ให้เวลาผ่านไปหลายวัน สัปดาห์ หรือเดือน พวกมันลอยตัว (drift) และหยุดแสดงเวลาจริง อย่างง่าย หลังจากลอยตัว มันอาจแสดง "10:30" ตอนที่จริงๆ แล้วเป็น "10:33" การปรับนาฬิกาคอมพิวเตอร์ด้วยมือเป็นประเพณีบนคอมพิวเตอร์เก่า แต่หลังจากการเชื่อมต่ออินเทอร์เน็ตแพร่หลาย ระบบปฏิบัติการสมัยใหม่เริ่มปรับนาฬิกาอัตโนมัติด้วยความช่วยเหลือของ NTP Servers

NTP คืออะไร?

NTP ย่อมาจาก Network Time Protocol เป็นอัลกอริทึมที่ออกแบบมาเพื่อซิงโครไนซ์นาฬิกาคอมพิวเตอร์ผ่านการเชื่อมต่อเครือข่ายและรักษาความแม่นยำ

วิธีเปิดใช้งานการซิงค์เวลาใน Linux

โชคดีที่ระบบแจกจ่ายส่วนใหญ่ใช้งานรูปแบบหนึ่งของการซิงค์เวลา มาพร้อมกับระบบ (Out of the box) หากคุณไม่เคยสังเกตนาฬิกาคอมพิวเตอร์ลอยตัวจากนาฬิกาโทรศัพท์ คุณเกือบแน่นอนว่ามี NTP Client/Daemon ทำงานอยู่แล้ว

บน Linux OS ที่มี systemd

ระบบแจกจ่าย Linux ส่วนใหญ่ใช้ systemd และมาพร้อม Daemon systemd-timesyncd หมายความว่าคุณมี NTP Client ติดตั้งมากับระบบแล้วบน Ubuntu, Debian, Fedora, Arch Linux, openSUSE, Manjaro และอื่นๆ รวมถึงระบบที่พัฒนาจากพวกเขา (เช่น elementary OS, Zorin OS) รันคำสั่งนี้เพื่อตรวจสอบว่า NTP Sync เปิดอยู่หรือไม่:

timedatectl

หากเห็น Network time on: yes ในเอาต์พุท แสดงว่านาฬิกาคอมพิวเตอร์ถูกปรับอัตโนมัติเป็นระยะๆ ผ่าน NTP บางครั้งอาจเห็น NTP synchronized: no ซึ่งอาจหมายถึงนาฬิกาซิงค์ผ่านเครื่องมืออื่นนอกจาก "systemd-timesyncd" หรืออาจหมายถึง systemd-timesyncd ยังไม่ซิงค์แต่จะทำภายหลัง

หากเห็น Network time on: no ให้รันคำสั่งต่อไปนี้เพื่อเปิดใช้งาน NTP Time Synchronization:

sudo timedatectl set-ntp true

แค่นี้ก็พอสำหรับระบบแจกจ่ายเหล่านี้

บน Linux OS ที่ไม่มี systemd

ด้วยความนิยมของ MX Linux ล่าสุด ตัวอย่างเกี่ยวกับ OS นี้เหมาะสม 也是 特殊的กรณี มัน "ค่อนข้างมี" systemd แต่ "ค่อนข้างไม่มี" timedatectl รายงานว่า Network time "on" แต่ systemd-timesyncd ไม่ได้ใช้

มันซิงค์อย่างไร? ตรวจสอบด้วยคำสั่งถัดไป ซึ่งใช้ได้กับ Linux OS อื่นๆ ทุกตัว

sudo cat /var/log/syslog | grep ntp

บน MX Linux จะได้ผลลัพธ์คล้ายรูปถัดไป

จากข้อความ Log ที่กรองแล้ว คุณเห็นว่า Client "ntpdate" รันครั้งเดียว นี่เป็น Client ยอดนิยม ติดตั้งมากับระบบแจกจ่าย Linux หลายตัว มันเบาและ Query NTP Servers แบบ sporadic (ไม่สม่ำเสมอ) มันไม่รันในพื้นหลัง ถูก Trigger โดยสคริปต์ ซิงค์ แล้วออกไป

หมายความว่าเวลาไม่ได้ซิงค์ด้วยความแม่นยำสูงสุด (มิลลิวินาทีหรือไมโครวินาที) แต่แม่นยำพอสำหรับวัตถุประสงค์ส่วนใหญ่ ปกติแม่นยำถึงวินาที

บน OS อื่น คุณอาจเห็น "ntpd" ซึ่งเป็น Daemon รันในพื้นหลังตลอดเวลา และแม่นยำมาก ยิ่งรันนาน ยิ่งแม่นยำ

หากด้วยเหตุผลใดคุณต้องการติดตั้ง ntp หรือ ntpdate บน OS ที่มี systemd ให้ปิด NTP Client ของ systemd ก่อน

sudo timedatectl set-ntp false

คำสั่งข้างต้นไม่จำเป็นบนระบบแจกจ่ายที่ไม่มี systemd

ติดตั้ง NTPdate Client

เหมาะสำหรับคอมพิวเตอร์บ้าน, ลัปท็อป และอุปกรณ์อื่นๆ ที่ไม่ได้เชื่อมต่ออินเทอร์เน็ตตลอดเวลา

บน Debian, Ubuntu, Linux Mint, Zorin และระบบแจกจ่ายที่พัฒนาจากเหล่านี้ รัน:

sudo apt install ntpdate

บนระบบแจกจ่าย Debian-based ทั้งหมด มันถูกตั้งค่ามาแล้วให้รันหลังเห็นการเชื่อมต่อเครือข่ายใหม่ คุณบังคับซิงค์เวลาตอนนี้ได้โดยตัดการเชื่อมต่อเครือข่ายและเชื่อมต่อใหม่

บน Fedora ntpdate จะถูก Deprecated แนะนำให้ใช้ ntpd Daemon แทน (ดูส่วนถัดไป) เหมือนกันสำหรับระบบแจกจ่ายอื่นๆ ทั้งสองเหตุผล:

  • บางครั้งไม่รวม ntpdate ในแพ็กเกจแยก แต่รวมกับ ntpd จากส่วนถัดไป
  • ไม่ทำให้ ntpdate รันอัตโนมัติทุกครั้งที่เครือข่ายเชื่อมต่อ คุณต้องใส่ ntpdate เองในสคริปต์ที่รันอัตโนมัติหลังเครือข่ายเชื่อมต่อ

ในกรณีนี้ ติดตั้ง ntpd ตามส่วนถัดไปสมเหตุสมผลกว่า

ติดตั้ง NTPD Daemon

บน Debian, Ubuntu, Zorin, Mint และระบบแจกจ่ายที่พัฒนาจาก Debian หรือ Ubuntu รัน:

sudo apt install ntp

ระบบเหล่านี้จะเริ่ม ntpd ทันที และเปิดใช้งานอัตโนมัติทุกครั้งที่บูท ไม่ต้องทำอะไรเพิ่ม

บน Fedora ติดตั้งด้วย:

sudo dnf install ntp

บน CentOS รัน:

sudo yum install ntp

สำหรับ Arch Linux ใช้:

sudo pacman -S ntp

และบน openSUSE ใส่:

sudo zypper install ntp

หลังจากนั้น เปิดใช้งาน Service ให้รันตอนบูท และเริ่มมัน:

sudo systemctl enable ntpd
sudo systemctl start ntpd

บนระบบแจกจ่ายอื่นที่รันไม่มี systemd คุณอาจต้องรันคำสั่งเหล่านี้แทน:

sudo update-rc.d ntpd enable
sudo service ntpd start

หรือคำสั่งเทียบเท่าสำหรับ OS ของคุณ

หากได้ข้อผิดพลาดว่า ntpd ไม่มีอยู่ ให้แทนที่ "ntpd" ด้วย "ntp" ในคำสั่งข้างต้น บางระบบแจกจ่ายตั้งชื่อไฟล์ Service ของ Daemon ntpd ต่างกัน

สรุป

เรื่องนี้พบได้น้อยที่คุณต้องทำตามขั้นตอนเหล่านี้บน Linux OS ที่มี GUI อย่างน้อย การซิงค์เวลาควรถูกตั้งค่าให้คุณแล้ว แตขั้นตอนเหล่านี้ช่วย Debug ปัญหาบางครั้ง Control Panel หลาย Desktop Environment ให้เปิด/ปิดการซิงค์เวลา ในพื้นหลังพวกมันใช้คำสั่งคล้ายกันตั้งค่าให้คุณ คุณทำเองได้เมื่อเครื่องมือ GUI ล้มเหลว