ทำไมนาฬิกาของ Ubuntu ถึงช้าลงหรือเร็วขึ้น?


16

นาฬิกาของ Ubuntu ปิดประมาณครึ่งชั่วโมง:

Ubuntu Time & Date v. เวลาทางการสหรัฐ

ฉันจะเริ่มแก้ไขปัญหานี้ได้ที่ไหน

มันถูกกล่าวหาว่าถูกตั้งค่าเป็น "อัตโนมัติจากอินเทอร์เน็ต" ฉันจะยืนยันได้อย่างไรว่า "อินเทอร์เน็ต" รู้ว่าเวลานั้นคืออะไร?

รายละเอียด

Ubuntu มีเวลามากมายในการสื่อสารกับอินเทอร์เน็ต:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

เซิร์ฟเวอร์เวลานี้ที่ฉันพบผ่านการค้นหาเว็บดูเหมือนจะรู้เวลาที่ถูกต้อง:

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

ไม่มีข้อผิดพลาดที่รายงานเกี่ยวกับ NTP:

$ grep -ic ntp /var/log/syslog
0

หลังจากรีบูตเครื่องเวลาจะได้รับการแก้ไขโดยอัตโนมัติและมีลักษณะดังต่อไปนี้/var/log/syslog:

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

บันทึกออฟเซ็ตที่รายงานโดย ntpdate แสดงว่านาฬิกาลอยประมาณ 9 วินาทีทุกชั่วโมง:

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

เวลานาฬิกา v. ชดเชยเวลาเซิร์ฟเวอร์


พื้นหลัง: NTPเป็นเครื่องมือที่ดีในการรักษาเวลาที่ถูกต้อง แต่ใช้เวลา จำกัด (หลายนาทีหรือหลายชั่วโมง) เพื่อไปยังเวลาปัจจุบันจากเวลาที่ไม่ถูกต้อง สิ่งนี้เกี่ยวข้องกับ ntp-servers (ตัวเลือกของคุณ) และเวลาแฝงของอินเทอร์เน็ตของคุณ @Floydได้อธิบายทางลัดเพื่อบังคับเวลาที่ถูกต้องอย่างรวดเร็ว แต่เวลาที่ดีกว่า (และการใช้ntp ) จำเป็นต้องเลือกอย่างระมัดระวังของเซิร์ฟเวอร์ ntp
david6

รถของฉันทำสิ่งนี้ ... ทำให้ฉันเป็นบ้า ... ฉันต้องย้อนเวลากลับไป 20 นาทีทุกสัปดาห์ ...
TheXed

สิ่งแรกที่ฉันจะลองทำคือเปลี่ยนแบตเตอรี่บนเมนบอร์ด ....
TheXed

คำตอบ:


17

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

ไม่เพียง แต่ตั้งเวลา แต่ยังทำการปรับอย่างต่อเนื่องเพื่อให้คอมพิวเตอร์ของคุณเก็บเวลาเพื่อให้เวลาไม่เพียง แต่ในเวลาหนึ่งทันที แต่อยู่ใกล้กับเวลาจริง (ภายในสิบวินาทีมิลลิวินาทีไม่กี่นาที) . มันปรับทั้งเฟส (เวลา) และอัตรา (นาฬิกา "ติ๊ก" เร็วแค่ไหน) ntpไม่ทำให้นาฬิกาวิ่งไปข้างหลัง อาจใช้เวลานานในการกำหนดวิธีที่รวดเร็วในการติ๊กนาฬิกาหลังจากรีบูตดังนั้น ntp จะคอยติดตามการดริฟท์ในไฟล์ชื่อ /var/lib/ntp/ntp.drift เนื่องจากคุณไม่ได้ใช้ ntp สิ่งนี้จะไม่เกิดขึ้น

ntpไม่ได้รับความนิยมเท่าที่เคยเป็นมาเพราะแล็ปท็อปและเดสก์ท็อปนอนและเครื่องเสมือนหยุดทำงานบางครั้ง มันถูกออกแบบมาให้ทำงานทุก ๆ ครั้งตามกำหนดเวลาของตัวเองบนคอมพิวเตอร์ที่ใช้งานได้ตลอดเวลาและในโลกแห่งความจริงที่เวลามีความต่อเนื่อง นั่นอาจเป็นสาเหตุที่ไม่ได้ติดตั้งตามค่าเริ่มต้นในเวิร์กสเตชันที่ทันสมัย [สำหรับ Vmware ให้ดูสิ่งนี้]

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

ด้วยเหตุผลบางอย่างหุ้นntpdateไม่ได้ทำงานอยู่ตลอดเวลา ใช้ntpdate-debianแทนในกรณีนี้ ไวยากรณ์สำหรับ for.mer เป็นสิ่งที่ต้องการntpdate ntp.ubuntu.comสำหรับหลังคือntpdate-debian

ในกรณีที่ไม่มีสิ่งใดสิ่งหนึ่งจากนั้นntpเป็นวิธีที่ดีกว่าในการรักษาเวลา

ระบบได้รับการออกแบบให้ใช้ตัวจับเวลาขัดจังหวะทุก ๆ ครั้งและอัพเดตความคิดของเวลาทุกครั้งที่มีการขัดจังหวะ ตราบใดที่ตัวจับเวลาฮาร์ดแวร์กำลังทำงานอยู่ที่สเป็ค เวลาไม่ลอยมากเกินไป หากตัวจับเวลาฮาร์ดแวร์ไม่ได้เวลาจะเลื่อนเพิ่มขึ้น (นาฬิกาดังกล่าวทั้งหมดจะลอยไปบางส่วนด้วยเหตุผลเดียวกันกับนาฬิกาข้อมือหรือนาฬิกาที่ควบคุมด้วยแบตเตอรี่ของคุณ) นาฬิกาที่เสียบเข้ากับผนังจะถูกซิงค์กับเวลาตามความถี่และระยะเวลาที่เก็บ บริษัท พลังงานของคุณ)

ตัวจับเวลาคอมพิวเตอร์ส่วนใหญ่ถูกควบคุมโดยวงจรออสซิลเลเตอร์ที่ควบคุมด้วยคริสตัลในวงจรรวม แม้จะมีคริสตัลพวกเขาทำงานได้เร็วขึ้นและช้าลงขึ้นอยู่กับสภาพแวดล้อมส่วนใหญ่อุณหภูมิ นอกจากว่าคุณจะมีซอฟแวร์ซิงค์เวลาติดตั้งเราไม่ทราบเกี่ยวกับฉันจะบอกว่านาฬิกาของระบบของคุณเป็นข้อมูลจำเพาะ

หากคุณใช้งานntpเป็นเวลาหนึ่งหรือสองวันมันจะเก็บข้อมูลไว้ใน /var/lib/ntp/ntp.drift ซึ่งจะระบุว่าจะต้องปรับอัตราที่ระบบปฏิบัติการของคุณใช้เวลามากขึ้นต่อการขัดจังหวะเพื่อ จับคู่อัตรานาฬิกาฮาร์ดแวร์ของคุณตามเวลาจริงที่ได้รับผ่านอินเทอร์เน็ต การทำให้ไฟล์เหมือนเดิมและเพิ่งเริ่มต้นและหยุดntpหลังจากหนึ่งนาทีหลังจากนั้น (สมมติว่าคุณเก็บไฟล์ /var/lib/ntp/ntp.dntp.drift ไม่เปลี่ยนแปลง) อาจทำสิ่งต่าง ๆ ให้แก้ไขได้หากนาฬิกา bias ntp ยังคงอยู่หลังจากนั้นntpสิ้นสุดลง ฉันไม่แน่ใจรายละเอียดนี้

ฉันสงสัยว่าค่าntpจะเก็บไว้ใน /var/lib/ntp/ntp.drift แตกต่างจากของฉันมาก

หากเครื่องนี้ทำงานอยู่ตลอดเวลาอย่างไรก็ตามสิ่งที่ดีที่สุดที่ต้องทำคือติดตั้งntpและปล่อยให้เครื่องทำสิ่งนั้น ดูคำตอบอื่น ๆ สำหรับรายละเอียดเกี่ยวกับการใช้เวลาให้ถูกต้องก่อนเริ่ม ฉันรันntpบนเดสก์ท็อปของฉันและntpdateบนแล็ปท็อปของฉัน

adjtimex ที่เป็นไปได้ทางเลือกที่น่าสนใจถูกกล่าวถึงในคำตอบนี้โดย nealmcb

หากระบบของคุณไม่ได้ทำงานอยู่ตลอดเวลาการรันntpdateณ เวลาบูตดูเหมือนจะเป็นตัวเลือกที่ดี

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

หนึ่ง gotcha นั่นอาจเป็นปัญหา: เนื่องจากฉันจำได้ว่าntpคาดว่าเวลาจะไม่ไกลเกินไป ถ้าเป็นเช่นนั้นพยายามทำอย่างระมัดระวังntpจะไม่ปรับเวลาเลย หากคุณอยู่ในสถานการณ์เช่นนี้คุณควรดำเนินการทั้งสองอย่าง - เรียกใช้ntpdateขณะบู๊ตเพื่อให้ได้เวลาในการเริ่มต้นเวลาที่ถูกต้องจากนั้นปล่อยให้ntpทำงานเพื่อให้ทำงานได้อย่างแม่นยำ โดยเฉพาะแบตเตอรี่เมนบอร์ดที่ไม่ดีอาจทำให้เกิดข้อผิดพลาดนี้เช่นเดียวกับการบูตคอมพิวเตอร์ที่ถูกปิดเป็นเวลานาน


คำอธิบายที่ดีจอห์น! สิ่งเล็ก ๆ น้อย ๆ เพียงอย่างเดียว - วันที่ / เวลาบนมาเธอร์บอร์ดส่วนใหญ่นั้นใช้ RTC แยกต่างหาก (นาฬิกาเรียลไทม์) ซึ่งใช้คริสตัล 32.768 KHz ของตัวเอง (เนื่องจากการแบ่งความถี่นั้นด้วย 2 ^ 15 ทำให้คุณแม่นยำหนึ่งวินาที) และ FSB นาฬิกาซึ่งมักจะอยู่ที่ 100+ MHz ไม่มีส่วนเกี่ยวข้องกับการเก็บวันที่ - ถ้างั้น / overclocking จะทำให้มันยุ่งเหยิง - แทนที่จะเป็นคริสตัลที่ลอยอยู่ในโมดูล / วงจร RTC คุณช่วยค้นหาปัญหานี้และตอบกลับความคิดเห็นและ / หรือแก้ไขคำตอบเพื่อสะท้อนสิ่งนี้ได้หรือไม่?
ish

ฉันจะทำทั้งสองอย่าง! ฉันได้ลบการกล่าวถึงการโอเวอร์คล็อกเนื่องจากฉันคิดว่ามันไม่น่าจะเป็นไปได้อย่างที่ฉันพูด อย่างไรก็ตาม RTC นั้นใช้เพื่อตั้งเวลาในการบู๊ตอย่างไรก็ตาม ตามความคิดเห็นของคุณกล่าวถึงมันถูกต้องเพียง 1 วินาที man rtcหน้ากล่าวว่า "RTCs ไม่ควรจะสับสนกับนาฬิกาของระบบซึ่งเป็นนาฬิกาซอฟแวร์การบำรุงรักษาโดย kernel และใช้ในการดำเนิน gettimeofday (2) ..." ไม่ทราบว่านาฬิกาของระบบที่เกี่ยวข้องกับนาฬิกาเอฟเอส . ดูที่เคอร์เนลการกำหนดค่าเคอร์เนล i386 ที่แม่นยำล่าสุดของ Ubuntu มีนาฬิการะบบถูกอัพเดตที่ 250Hz ขอบคุณสำหรับความคิดเห็น!
John S Gruber

@izx บนระบบแล็ปท็อปของฉันเคอร์เนลกำลังใช้ HPET เป็นนาฬิกาแหล่งข้อมูล มันสามารถกำหนดค่าได้ Wikipedia บอกว่านี่เป็นส่วนหนึ่งของฟังก์ชั่นทางใต้ ฉันไม่รู้ว่าสิ่งที่พูดเกี่ยวกับความสัมพันธ์กับ FSB แต่ฉันรวบรวม FSB เป็นส่วนหนึ่งของสะพาน Northbridge
John S Gruber

ขอบคุณ John และ @izx ฉันยินดีกับความครอบคลุมของสิ่งนี้ izx ฉันหวังว่าคุณจะไม่ใช้มันเป็นการส่วนตัวว่าฉันได้ทำเครื่องหมายว่าเป็นที่ยอมรับแทน ฉันคิดว่ามันจะเป็นการอ่านที่ดีกว่าสำหรับผู้เยี่ยมชมในอนาคต
ændrük

@ ændrük: ไม่มีปัญหาเลยอย่างที่คุณเห็นฉันชื่นชมจอห์นทั่วถึงมากเช่นกัน
ish

12

- โดยปกติเวลาจะซิงค์เพียงครั้งเดียวเมื่อบู๊ตเครื่องหรือเริ่มทำงานจากโหมดพักเครื่อง

ดังนั้นปัญหาดูเหมือนจะเป็นว่าเซิร์ฟเวอร์เวลาเริ่มต้นของ Ubuntu (มันคืออะไร) มีเวลาไม่ถูกต้องหรือ Ubuntu ไม่ได้ตั้งเวลาโดยอัตโนมัติจากอินเทอร์เน็ต

ไม่เซิร์ฟเวอร์เวลาของ Ubuntu นั้นถูกต้องและมันตั้งค่าเวลาโดยอัตโนมัติจากมัน

ปัญหาคือโดยปกติจะเกิดขึ้นเพียงครั้งเดียวในการบู๊ตแต่ละครั้ง (หรือให้แม่นยำยิ่งขึ้นในแต่ละครั้งที่มีการเชื่อมต่อเครือข่าย - ไม่ว่าจะเป็นการปิดระบบ, พักเครื่องหรือไฮเบอร์เนต) จากความพร้อมในการทำงานของคุณคุณสามารถบอกได้ว่ามันไม่ได้ถูกซิงค์ในเวลามากกว่าหนึ่งสัปดาห์ และนาฬิการะบบของคุณกำลังทำงานอย่างรวดเร็วเล็กน้อยด้วยเหตุผลบางอย่าง

- ตั้งค่างานเป็นรายชั่วโมงcronเพื่อซิงค์หากคุณไม่รีบูตบ่อย ๆ หรือเซิร์ฟเวอร์ / เดสก์ท็อปของคุณจะไม่เข้าสู่โหมดสลีป

ทางออกที่ดีที่สุดของคุณคือตั้งค่า cron-job ฉันจะบอกทุกชั่วโมงถ้าคุณต้องการเวลาที่แม่นยำที่สุด วิธีที่ง่ายที่สุดที่จะทำคือ:

  • sudo editor /etc/cron.hourly/ntpsync

เพิ่มบรรทัดต่อไปนี้:

#! / bin / ทุบตี

ntpdate ntp.ubuntu.com # หรือเซิร์ฟเวอร์ที่คุณเลือก
  • บันทึกออกและ sudo chmod +x /etc/cron.hourly/ntpsync

คุณสามารถใส่มันลงไป/etc/cron.dailyแทนได้ถ้าต้องการวันละครั้ง


จับได้เห็นชัดตรงเผง. ฉันยอมรับสิ่งนี้เพื่อตอบคำถามของฉันอย่างถูกต้องว่าเหตุใดนาฬิกาผิดปกติ แต่ฉันสงสัยว่าวิธีแก้ปัญหานั้น ฉันจะต้องเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ก่อนที่ฉันจะตัดสินใจว่าจะลงมือทำอะไร
ændrük

หากคุณตั้งค่าเซิร์ฟเวอร์ที่คุณเลือกในไฟล์ ntp.conf คุณต้องกำหนดใหม่ที่นี่หรือไม่
Snekse

6

สิ่งนี้อาจเกิดขึ้นได้หากคุณติดตั้ง ntp time daemon และเวลาที่เครื่องคุณอยู่ไกลเกินกว่าจะแก้ไขได้อย่างรวดเร็ว

เพื่อแก้ไขมันเปิด terminal และทำ

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

สิ่งนี้ทำอะไร:

  1. หยุด ntp daemon
  2. ตั้งนาฬิกา
  3. เวลาควรถูกต้องแล้ว
  4. รีสตาร์ท ntp daemon

หากคุณไม่ได้ติดตั้ง ntp ให้ทำด้วย

  sudo apt-get install update

อัปเดต: การใช้ ntpdate ในงาน cron ดังที่แนะนำไว้ที่นี่จะนำไปสู่ปัญหาที่ละเอียดอ่อน

ntpdate จะทำให้เวลา 'กระโดด' ทุกชั่วโมงหรือมากกว่านั้น การใช้ ntp หลีกเลี่ยงปัญหานี้เพราะมันจะปรับเวลาโดยบิดเบือนนาฬิกา นอกจากนี้ในขณะที่การเลือกเซิร์ฟเวอร์ ntp ในพื้นที่ใกล้เคียงก็ให้ความแม่นยำที่สูงขึ้น แต่ก็ไม่จำเป็น ไฟล์กำหนดค่าเริ่มต้น ntp มีเซิร์ฟเวอร์หลายตัวในนั้นและเซิร์ฟเวอร์จะชดเชยความล่าช้าโดยอัตโนมัติ

บรรทัดด้านล่าง: - ใช้ ntp - หากคุณอยู่ไกลปิด ntp เรียกใช้ ntpdate หนึ่งครั้งและเริ่ม ntp ใหม่


/etc/init.d/ntpไม่มีอยู่ นี่เป็นการติดตั้ง Ubuntu 12.04 ที่ค่อนข้างเร็วและฉันไม่ได้ตั้งใจเปลี่ยนแปลงอะไรที่เกี่ยวข้องกับเวลา
ændrük

จากนั้นฉันแนะนำให้ติดตั้ง
ฟลอยด์

มากที่สุดเท่าที่เป็นไปได้ฉันไม่ต้องการยุ่งกับการกำหนดค่าและบริการทั่วทั้งระบบ หากไฟล์นี้ไม่ได้รับการติดตั้งโดยค่าเริ่มต้นเหตุใดจึงต้องมีการตั้งค่าเวลาและวันที่เริ่มต้นให้ทำงาน
ændrük

1
เวลาถูกต้องหลังจากรีบูตหรือไม่ ฉันสงสัยว่าการอัพเดทนาฬิกาจะรัน ntpdate เพียงครั้งเดียว บางระบบมีปัญหาที่นาฬิการะบบดูแลโดย linux นั้นทำงานเร็วเกินไป ฉันมีสิ่งนั้นโดยเฉพาะอย่างยิ่งกับระบบที่ใช้เป็นเครื่องเสมือน
ฟลอยด์

1
หากปัญหานี้ยังคงมีอยู่หลังจากรีบูตหรือปิดเครื่องอาจเป็นเพราะเซลล์ CMOS ของคุณเสียชีวิตใน MOBO
atenz

1

ฉันมีปัญหาที่คล้ายกันและเกิดจากบางสิ่งในไฟร์วอลล์ ในที่สุดฉันเพิ่มงานcronรายชั่วโมงแต่เพิ่มการ-uโต้แย้งntpdateเพื่อให้มันใช้พอร์ตมาตรฐานไม่มี

ปัญหาของฉันเกิดจากอูบุนตูไม่ได้ตรวจสอบว่าntpdateทำงานจริงหรือไม่แต่สมมติว่ามันใช้งานได้โดยอัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.