วันอาทิตย์ที่ 10 สิงหาคม พ.ศ. 2551

NTPDate: เวลานั้นสำคัญไฉน ....

ที่ ตั้งหัวเรื่องอย่างนี้ก็เพราะสิ่งที่เรากำลังจะมาดูกันก็คือเรื่อง "เวลา" และเจ้าเวลานี่เองที่เป็นต้นเหตุของการเรียนรู้ในครั้งนี้ เรื่องก็มีอยู่ว่า หากเราใช้งานเครื่องคอมพิวเตอร์เราคนเดียว ไม่ต้องติดต่อกับใคร ไม่ต้องส่งข้อมูลให้ใคร เรื่องเวลาเราจะตั้งเป็นเท่าไรก็ได้ ช้าหรือเร็วก็แล้วแต่ชอบใจ แต่เมื่อใดก็ตามที่เราต้องส่งข้อมูลไปยังเครื่องอื่น ๆ และต้องมีการเปรียบเทียบกันว่าข้อมูลตัวไหนเป็นตัวใหม่หรือเก่าแล้วหละก็ ....เกิดปัญหาแล้วสิ.... เพราะการจะเปรียบเทียบกันต้องตั้งอยู่บนฐานเวลาที่ตรงกัน หากช้า หรือเร็วกว่ากัน ก็ส่งผลให้การเปรียบเทียบผิดพลาด

วิธีแก้ปัญหา ... ก็ตั้งเองให้มันตรงกันสิ นั่นมันก็ได้อยู่หรอก แต่มีวิธีที่ดีกว่านั้น เราคงเคยได้ยินเรื่องการตั้งเวลา โดยการรับค่าเวลาจากเซิร์ฟเวอร์เวลา (Time Server) ซึ่งเครื่องที่ขอเวลาจากเซิร์ฟเวอร์ ก็จะได้เวลาที่ตรงกันเอง โดยไม่ต้องออกแรงมากมาย งั้นก็เริ่มลงโปรแกรมเลยละกันครับ

# aptitude install ntpdate

ได้โปรแกรมมาแล้ว ก็เหลือแต่ต้องตั้งค่าต่าง ๆ ให้โปรแกรม แต่ว่าไปแล้วค่าที่ระบบตั้งมาให้ก็ใช้ได้แล้ว อาจจะไม่ต้องแก้อะไรเลย

ลองขอเวลาดู

# ntpdate-debian

31 Jan 00:24:55 ntpdate[10301]: adjust time server 216.162.200.152 offset -0.000195 sec

อาฮ่า.... ได้เวลามาแล้ว แต่ค่อนข้างช้าแฮะ ... ทำไหมเหรอครับ ก็เจ้าเซิร์ฟเวอร์เวลา ที่ตั้งค่ามากับแพ็คเกจ เขาไม่ได้ตั้งสำหรับเราคนไทยใช่ไหมครับ งั้นก็มาใช้ตัวที่อยู่ใกล้ ๆ หน่อยละกันจะได้เร็วหน่อย

# echo "server th.pool.ntp.org" > /etc/ntp.conf

คราวนี้ลองดูใหม่

# ntpdate-debian

31 Jan 00:29:51 ntpdate[10329]: adjust time server 61.19.242.42 offset 0.001380 sec

รอบนี้ได้มาเหมือนกัน เร็วกว่าด้วย

แต่ทว่า โดยพื้นฐานของระบบแล้ว จะเกิดการคลาดเคลื่อนของเวลาตลอดเวลาทีละเล็กทีละน้อย เนื่องจากพื้นฐานความแตกต่างทางด้านฮาร์ดแวร์ ซึ่งมีความแม่นยำต่างกัน ดังนั้นการขอเวลาจากเซิร์ฟเวอร์เวลาตามช่วงเวลาที่กำหนด อาจจะเป็น 1-2 ชั่วโมงต่อครั้ง จึงเป็นความคิดที่ดี

งั้นก็กำหนด
/etc/crond.hourly/updatetime

#!/bin/bash
/usr/sbin/ntpdate-debian > /dev/null
/sbin/hwclock --adjust # ปรับค่าความแตกต่างเวลาระหว่าง System Time กับ Hardware Clock (RTC)
/sbin/hwclock --systohc # ตั้งค่าเวลา Hardware Clock ตาม System Time

# /etc/init.d/cron restart

ตอนนี้เครื่องของเราก็จะทำการขอเวลาทุก ๆ ชั่วโมงแล้ว

System Time คือเวลาที่ระบบใช้ในขณะที่ลินุกซ์ยังทำงาน โดยจะเป็นคนละส่วนกันกับ Hardware Clock (RTC - Real Time Clock) นั่นหมายความว่า ค่าเวลาที่อานได้จากคำสั่ง date จะมาจาก System Time ไม่ได้มาจาก Hardware Clock โดยหน้าที่ของ Hardware Clock ก็คือจะคอยให้เวลากับลินุกซ์ในขณะเริ่มทำงาน รวมไปถึงขณะที่ลินุกซ์ไม่ได้ทำงานด้วย(ปิดเครื่อง) ดังนั้น การตั้งเวลา Hardware Clock ตาม System Time จึงทำให้เรามั่นใจได้ว่า หากปิดเครื่องไปแล้ว เวลาที่เปิดเครื่องมาใหม่ เรายังมีเวลาของระบบที่ถูกต้องอยู่

มาถึงตอนนี้เราก็ได้เวลาที่ถูกต้องและค่อนข้างแม่นยำมาแล้ว ก็ทำอย่างเดียวกันกับเครื่องแม่ข่ายที่เราจะต้องส่งข้อมูลไปเก็บ และอาจจะต้องมีการเปรียบเทียบเรื่องเวลาของการใช้งาน แก้ไข ไฟล์ คราวนี้ก็ไม่มีปัญหาแล้ว :)

คลังบทความของบล็อก