ในบทความนี้ เราจะแสดงวิธีตั้งเวลา วันที่ เขตเวลา ซิงโครไนซ์เวลากับเซิร์ฟเวอร์ NTP และแก้ไขปัญหาทั่วไปใน CentOS Linux
มีนาฬิกาสองประเภทบนเซิร์ฟเวอร์:ฮาร์ดแวร์ หนึ่งนาฬิกา (นาฬิกาตามเวลาจริง) ที่ทำงานแม้ว่าเซิร์ฟเวอร์จะปิดและระบบปฏิบัติการซอฟต์แวร์ นาฬิกา. เวลาบนนาฬิกาเหล่านี้อาจแตกต่างกัน หลังจากเริ่มระบบปฏิบัติการ นาฬิกาของซอฟต์แวร์จะอิงตามฮาร์ดแวร์และระบบปฏิบัติการอาจปรับเปลี่ยนได้
แอปพลิเคชันส่วนใหญ่ใช้เวลานาฬิกาของซอฟต์แวร์ในการทำงาน
Hwclock:การกำหนดค่าเวลาของฮาร์ดแวร์
นาฬิกาจับเวลา ใช้เพื่อตรวจสอบเวลาฮาร์ดแวร์ใน Linux:
hwclock --localtime
— ตรวจสอบเวลาฮาร์ดแวร์โดยไม่มีการแก้ไขhwclock --utc
– แสดงเวลาหากนาฬิกาฮาร์ดแวร์แสดงเวลา UTC
# hwclock --localtime
2020-10-12 06:12:02.912866-04:00
# hwclock --utc
2020-10-12 02:12:18.915319-04:00
ในการตั้งเวลาฮาร์ดแวร์ตามเวลาของระบบ ให้รันคำสั่งนี้:# hwclock --systohc
ในการตั้งเวลาฮาร์ดแวร์ที่คุณต้องการ ให้รันคำสั่งต่อไปนี้:# hwclock --set --date "11 Oct 2020 17:30"
การกำหนดค่าเวลาด้วยตนเองใน CentOS
ใน Linux วันที่ หรือ timedatectl เครื่องมือที่ใช้ตรวจสอบและตั้งเวลาซอฟต์แวร์ หากคุณโทร เดท โดยไม่มีพารามิเตอร์ใด ๆ มันจะแสดงเวลาปัจจุบันบนเซิร์ฟเวอร์ของคุณ:
# date
Sun Oct 11 22:14:54 EDT 2020
หากต้องการตั้งเวลาด้วยตนเอง คุณสามารถใช้ วันที่ ด้วยพารามิเตอร์เพิ่มเติม:
# date MMDDhhmm
ตัวอย่างเช่น:
# date 10261740
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับวันที่ เวลา เขตเวลา การตั้งค่าการซิงโครไนซ์ การตั้งค่าเวลาออมแสง (DST) timedatectl ถูกนำมาใช้. ซึ่งจะให้ข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับการตั้งเวลาบนเซิร์ฟเวอร์
Timedatectl ยังอนุญาตให้เปลี่ยนเวลา:
# timedatectl set-time '2020-10-11 17:51:00'
จะตั้งค่า TimeZone ใน CentOS ได้อย่างไร
ในการตั้งเวลาตามเขตเวลาของคุณบน CentOS Linux คุณสามารถเปลี่ยนได้ด้วยตนเอง ในการทำเช่นนั้น คุณสามารถใช้เครื่องมือสองอย่าง:
- timedatectl
- tzdata
หากต้องการเปลี่ยนเขตเวลาโดยใช้ timedatectl , รันคำสั่งนี้:
# timedatectl set-timezone Canada/Pacific
# date
หรือคุณสามารถใช้ tzdata . หากต้องการใช้วิธีนี้ ให้แทนที่ไฟล์ /etc/localtime กับคนที่คุณต้องการ รายการโซนเวลาทั้งหมดอยู่ใน /usr/share/zoneinfo/
ไดเร็กทอรี มาเปลี่ยนเขตเวลาเป็น แคนาดา/แปซิฟิก . สำรองไฟล์ตำแหน่งปัจจุบัน:
# mv /etc/localtime /etc/localtime.bak
สร้าง symlink ไปยังเขตเวลาที่คุณต้องการตั้งค่า:# ln -s /usr/share/zoneinfo/Canada/Pacific /etc/localtime
กำหนดค่า CentOS ให้ซิงค์เวลากับเซิร์ฟเวอร์เวลา NTP
คุณสามารถกำหนดค่าการซิงโครไนซ์เวลาอัตโนมัติบนโฮสต์ของคุณด้วยเซิร์ฟเวอร์ NTP (Network Time Protocol) ภายนอก ในการดำเนินการ คุณต้องติดตั้ง บริการ ntp . ตัวอย่างเช่น คุณสามารถติดตั้งโดยใช้ yum ใน CentOS 7:
# yum install ntp -y
หลังการติดตั้ง เริ่มบริการ ntpd และเพิ่มในการเริ่มต้น:
# systemctl start ntpd.service
# systemctl enable ntpd.service
ตรวจสอบให้แน่ใจว่าบริการกำลังทำงาน:
# service ntpd status
Redirecting to /bin/systemctl status ntpd.service ● ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2020-10-11 15:37:33 +06; 5min ago Main PID: 3057 (ntpd) CGroup: /system.slice/ntpd.service └─3057 /usr/sbin/ntpd -u ntp:ntp -g
ระบุเซิร์ฟเวอร์ NTP เพื่อซิงโครไนซ์เวลากับใน /etc/ntp.conf :
server 0.pool.ntp.org server 1.pool.ntp.org server 2.pool.ntp.org
เวลาจะถูกซิงโครไนซ์ในทางกลับกัน หากไม่มีเซิร์ฟเวอร์ NTP ตัวแรก ระบบจะใช้เซิร์ฟเวอร์ที่สอง ฯลฯ
คุณสามารถซิงโครไนซ์เวลากับเซิร์ฟเวอร์ NTP ที่ระบุได้ด้วยตนเองโดยใช้คำสั่งนี้:
# ntpdate 192.168.1.23
โดยค่าเริ่มต้น ntpd เปิดใช้งาน "โหมด 11 นาที" หมายความว่าเวลาจะซิงโครไนซ์ทุก 11 นาที หากคุณไม่สามารถใช้ ntpd daemon คุณสามารถกำหนดค่าการซิงโครไนซ์เวลาโดยใช้ cron เพิ่มคำสั่งต่อไปนี้ใน cron:
# ntpdate pool.ntp.org
จะซิงค์เวลาใน CentOS 8 โดยใช้ Chronyd ได้อย่างไร
ใน CentOS 8 คุณจะต้องใช้ chrony เพื่อซิงโครไนซ์เวลา เนื่องจาก ntp และ ntpdate ถูกลบออกจากที่เก็บอย่างเป็นทางการแล้ว
ประโยชน์หลักของโครนีคือ:
- การซิงโครไนซ์เวลาที่รวดเร็วและแม่นยำ
- การทำงานที่เหมาะสมหากคุณไม่มีสิทธิ์เข้าถึงนาฬิกาหลัก (ntpd ต้องใช้คำขอเป็นประจำ)
- โดยค่าเริ่มต้น เวลาจะไม่ถูกแก้ไขทันทีหลังจากการซิงโครไนซ์เพื่อป้องกันปัญหาใดๆ ในการรันโปรแกรม
- ใช้ทรัพยากรน้อยลง
โดยค่าเริ่มต้น chrony ได้รับการติดตั้งใน CentOS Linux แล้ว แต่ถ้าคุณไม่มีด้วยเหตุผลบางประการ ให้ติดตั้ง:
# dnf install chrony
เช่นเดียวกับบริการอื่น ๆ ต้องเริ่มและเพิ่ม chrony เพื่อเริ่มต้นหลังจากการติดตั้ง:
# systemctl start chronyd
# systemctl enable chronyd
ตรวจสอบสถานะบริการ chronyd:
# systemctl status chronyd
เพื่อให้แน่ใจว่าการซิงโครไนซ์เวลาทำงาน ให้รันคำสั่งนี้:
# timedatectl status
NTP Service: active
ไฟล์การกำหนดค่า Chrony คือ /etc/chrony.conf . ระบุรายการเซิร์ฟเวอร์ NTP ที่คุณต้องการใช้สำหรับการซิงโครไนซ์ ชอบ ntp , chrony มีอินเทอร์เฟซบรรทัดคำสั่ง:chronyc . หากต้องการดูข้อมูลเกี่ยวกับตัวเลือกการซิงโครไนซ์เวลาปัจจุบัน ให้รันคำสั่งนี้:
# chronyc tracking
วิธีดูข้อมูลเกี่ยวกับเซิร์ฟเวอร์การซิงค์:
# chronyc sources
หากต้องการตั้งค่าวันที่และเวลาแบบเจาะจงด้วยตนเอง คุณสามารถใช้ วันที่ แต่ก่อนหน้านี้ปิดการใช้งาน chronyd ภูต
ปัญหาการซิงค์เวลาทั่วไปใน CentOS
ในส่วนนี้ ฉันจะอธิบายข้อผิดพลาดทั่วไปที่ปรากฏขึ้นเมื่อทำงานกับ timedatectl , ntp .
ในระหว่างการซิงโครไนซ์เวลาด้วยตนเอง คุณอาจพบข้อผิดพลาดนี้:
# ntpdate pool.ntp.org
ntpdate [26214]: the NTP socket is in use, exiting
ซึ่งหมายความว่า ntpd daemon กำลังทำงานและกำลังป้องกันการซิงโครไนซ์เวลาด้วยตนเอง หากต้องการซิงโครไนซ์เวลาด้วยตนเอง ให้หยุด ntpd daemon:
# service ntpd stop
และเรียกใช้การซิงโครไนซ์อีกครั้ง
ข้อผิดพลาดเดียวกันอาจเกิดขึ้นเมื่อทำงานกับ timedatectl:
Failed to set time: Automatic time synchronization is enabled.
คุณต้องปิดใช้งานการซิงค์อัตโนมัติใน timedatectl:
# timedatectl set-ntp 0
และรันคำสั่งนี้เพื่อตั้งเวลาและวันที่ที่คุณต้องการ:
# timedatectl set-time '2020-11-12 17:41:00'
เมื่อทำงานกับเขตเวลา อาจเกิดขึ้นว่าไม่ได้ติดตั้งบนเซิร์ฟเวอร์ของคุณและคุณไม่สามารถสร้าง symlink สำหรับเวลาท้องถิ่นได้ หากต้องการให้โซนเวลาพร้อมใช้งานบนโฮสต์ของคุณ ให้ติดตั้งเครื่องมือ tzdata:
# yum install tzdata -y
นอกจากนี้ คุณอาจพบข้อผิดพลาดบางอย่างระหว่างการซิงโครไนซ์ด้วยตนเอง เช่น ข้อผิดพลาดต่อไปนี้:
11 Oct 21:11:19 ntpdate[897482]: sendto(xx.xx.xx.98): Operation not permitted
ในกรณีนี้ ให้ตรวจสอบกฎของไฟร์วอลล์/iptables และตรวจสอบว่าพอร์ต UDP 123 เปิดอยู่บนเซิร์ฟเวอร์ของคุณ นอกจากนี้ โฮสต์ NTP บางรายการอาจไม่พร้อมใช้งานในระหว่างการตรวจสอบ