ฉันจะตั้งเวลาและวันที่จากอินเทอร์เน็ตได้อย่างไร


34

ฉันจะดึงข้อมูลวันที่จากอินเทอร์เน็ตและตั้งนาฬิกาของคอมพิวเตอร์จากบรรทัดคำสั่งได้อย่างไร


3
ฉันไม่เข้าใจ downvotes คำถามง่ายๆคือสิ่งที่ทำให้ชุมชนมีประสิทธิภาพ ยกตัวอย่างเช่นเห็นนี้
Mohsen

3
เมื่อฉันวางเมาส์เหนือลูกศรลงของคำถามฉันเห็น: "คำถามนี้ไม่ได้แสดงความพยายามในการวิจัยใด ๆ มันไม่ชัดเจนหรือไม่มีประโยชน์" ฉันจะถูกล่อลวงให้ลงคะแนนคำถามของคุณตามข้อแรก (ไม่มีข้อบ่งชี้ของสิ่งที่คุณพบ) ข้อที่สอง (ไม่บ่งชี้ว่าคุณกำลังทำงานบนแพลตฟอร์มใดโดยเฉพาะและทำไมจึงต้องเป็น commandline (แทนที่จะเป็น daemon เวลาปกติ) ) และผู้ใช้ที่สาม (ผู้ใช้ * nix ส่วนใหญ่จะมีการติดตั้ง daemon ในบางเวลาตามค่าเริ่มต้น)
Anthon

+1 ฉันไม่เข้าใจ downvotes เช่นกันเพราะนี่เป็นสิ่งที่ฉันดักฟังมาหลายครั้งแล้วและดูเหมือนว่าเป็นไปไม่ได้ที่จะหาสิ่งที่กระชับและมีประโยชน์เกี่ยวกับชุดรูปแบบนี้โดยเฉพาะ
l0b0

@Mohsen ฉันไม่ได้ลงคะแนน แต่ความแตกต่างของคำถามที่คุณเชื่อมโยงคือไม่มีswitchruby ในขณะที่คุณสามารถกำหนดวันที่ได้โดยตรงผ่านทางdate -s(ดังที่แสดงใน manpage) หรือใช้คำสั่งที่อธิบายไว้ด้านล่าง ...
Ulrich Dangel

1
@ อันที่ฉันไม่เห็นด้วย: คำถามนั้นเป็นเรื่องเกี่ยวกับอุปกรณ์ขนาดเล็กที่มี BusyBox ซึ่งทำให้คำแนะนำทั่วไป "ใช้ NTP" ไม่จำเป็นต้องใช้
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

คำตอบ:


29

คุณสามารถใช้ได้ :

sudo dpkg-reconfigure tzdata

สำหรับการกำหนดค่าเขตเวลาของคุณ

สำหรับการอัพเดตเวลาและวันที่จากอินเทอร์เน็ตใช้สิ่งต่อไปนี้:

ติดตั้ง

หากไม่ได้ติดตั้ง ntpd ใช้หนึ่งในคำสั่งต่อไปนี้เพื่อติดตั้ง ntpd:

  • สำหรับ RPM

    yum install ntp 
    
  • สำหรับ Debian based:

    sudo apt-get install ntp
    

องค์ประกอบ

อย่างน้อยคุณควรตั้งค่าพารามิเตอร์ต่อไปนี้ในไฟล์ /etc/ntp.conf config: server

ตัวอย่างเช่นเปิดไฟล์ /etc/ntp.conf โดยใช้โปรแกรมแก้ไขข้อความ vi:

  # vi /etc/ntp.conf

ค้นหาพารามิเตอร์เซิร์ฟเวอร์และตั้งค่าดังนี้:

  server pool.ntp.org

บันทึกไฟล์และรีสตาร์ทเซอร์วิส ntpd:

  # /etc/init.d/ntpd start

คุณสามารถซิงโครไนซ์นาฬิการะบบกับเซิร์ฟเวอร์ NTP ได้ทันทีด้วยคำสั่งต่อไปนี้:

  # ntpdate pool.ntp.org

* สำหรับการตั้งเวลาและวันที่ด้วยตนเองใช้ไวยากรณ์ต่อไปนี้:

 date --set="STRING"

ตัวอย่างเช่นตั้งค่าข้อมูลใหม่เป็น 2 ตุลาคม 2549 18:00:00 ให้พิมพ์คำสั่งต่อไปนี้ในฐานะผู้ใช้รูท:

# date -s "2 OCT 2006 18:00:00"

หรือ

# date --set="2 OCT 2006 18:00:00"

คุณสามารถทำให้รูปแบบง่ายขึ้นโดยใช้ไวยากรณ์ต่อไปนี้:

# date +%Y%m%d -s "20081128"

ในการตั้งเวลาให้ใช้ไวยากรณ์ต่อไปนี้:

# date +%T -s "10:13:13"

ที่ไหน

10: ชั่วโมง (hh) 13: นาที (mm) 13: วินาที (ss)

ใช้% p locale ที่เทียบเท่ากับ AM หรือ PM ให้ป้อน:

# date +%T%p -s "6:10:30AM"

# date +%T%p -s "12:10:30PM"

แม้ว่าข้อมูลวันที่จะดูเหมือนว่าถูกต้อง แต่ก็ไม่ได้นำความต้องการfrom the internetจากชื่อของ OP มาพิจารณาในทุกที่
Anthon

ฉันเชื่อว่าแพ็คเกจ tzdata (ข้อมูลโซนเวลา) จะซิงโครไนซ์ข้อมูลจากอินเทอร์เน็ตเท่านั้น ถูกต้องฉันถ้าฉันผิด
tusharmakkar08

3
tzdataเป็นข้อมูลเกี่ยวกับเขตเวลาและปรับเวลาตามฤดูกาล (เริ่มต้นการสิ้นสุดยุค) ไม่ได้เกิดขึ้นจริงวันที่และเวลา แน่นอนว่ามีประโยชน์ในการทราบวิธีไปยังเวลาท้องถิ่นของคุณโดยอิงตามความรู้เกี่ยวกับเขตเวลาและเวลา UTC ของคุณ แต่คุณยังจำเป็นต้องเรียกดูส่วนหลังจากอินเทอร์เน็ต
Anthon

คุณผิด. ต้องอัปเดตข้อมูลเขตเวลา (เนื่องจากมีการเปลี่ยนแปลงเกิดขึ้นตลอดเวลา) แต่จะไม่อัปเดตตัวเองโดยอัตโนมัติจากอินเทอร์เน็ต NOR ไม่ได้ตั้งเวลาจากอินเทอร์เน็ต
Ulrich Dangel

@ แอนทอน: ฉันได้แก้ไขคำตอบของฉันตามลำดับแล้วขอขอบคุณ
tusharmakkar08

22

รหัสเล็ก ๆ ที่ฉันพบเพื่ออัปเดตเวลาของคุณในกรณีที่คุณไม่ต้องการติดตั้งอะไรเพื่ออัพเดทวันที่ :)

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"

1
ฉันใช้google.inเพื่อรับเวลาปัจจุบันสำหรับเขตเวลาของฉัน (อินเดีย)
Dilawar

สังเกตการต่อท้ายZที่ระบุว่าเวลาถูกกำหนดในเขตเวลาซูลูดังนั้นจึงไม่จำเป็นต้องมีการปรับเปลี่ยนเขตเวลาพิเศษหากมีการตั้งค่าเขตเวลาของคอมพิวเตอร์อย่างถูกต้อง
user202729

9

ฉันใช้สิ่งนี้:

sudo ntpd -qg; sudo hwclock -w

ก่อนบอก ntpd เพียงแค่ตั้งเวลาและหยุดหลังจากนั้นด้วย -q นอกจากนี้ในกรณีที่นาฬิกาของคุณมีข้อผิดพลาดใหญ่เราจำเป็นต้องบอก ntpd เพื่อปรับในกรณีนั้นด้วย -g สุดท้ายเขียนนาฬิกาไปยังฮาร์ดแวร์เพื่อรักษาการเปลี่ยนแปลงเมื่อรีบูตด้วย hwclock -w (-w สำหรับการตั้งค่า hardwareclock เป็นเวลาของระบบปัจจุบันมีความแตกต่าง)


1
ฉันมักจะทำเช่นนี้กับ "&&" แทนเครื่องหมายอัฒภาคดังนั้นหากคำสั่งแรกควรล้มเหลว (เช่นการเชื่อมต่อเครือข่ายลง) คำสั่งที่สองคือการลัดวงจร
Theophrastus


5

บางดิสทริบิวชันกำลังขนส่งrdateสำหรับจุดประสงค์นั้น การใช้งานขั้นพื้นฐาน:

# just query
bash-4.2$ rdate pool.ntp.org
rdate: [pool.ntp.org]   Wed Jun 12 11:05:40 2013

# set system time
bash-4.2$ rdate -s pool.ntp.org

วิธีดีกว่าและง่ายกว่า ntp
andrewtweber

pool.ntp.orgrdateตอนนี้ปฏิเสธการเชื่อมต่อจาก time.nist.govโรงงาน นอกจากนี้เมื่อคุณตั้งเวลาของระบบคุณควรตั้งนาฬิกาฮาร์ดแวร์ด้วยโดยการรันhwclock -wเพื่อตั้งเวลาของระบบ จากนั้นคุณสามารถตรวจสอบความถูกต้องได้โดยเรียกใช้hwclock -r
MatthewLee

5

หลังจากการวิจัยบางอย่างฉันลงเอยด้วยสิ่งนี้ ฉันใช้มันกับเซิร์ฟเวอร์ของฉันด้วย:

sudo apt-get install ntp
sudo dpkg-reconfigure ntp
ntpq -p

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

ที่มา: ที่นี่และที่นี่


0

เพื่อหา "เพื่อน" (โฮสต์ที่คุณสามารถสอบถาม) ntpq -pคุณสามารถใช้

หากคุณมีบริการ NTP sudo service ntp stopทำงานคุณต้องหยุดมันก่อนที่ปรับปรุงด้วยตนเองเช่นการใช้

sudo ntpdate "peer"ตอนนี้คุณสามารถสอบถามเพียร์สำหรับตัวอย่างการใช้


0

ใช้เครื่องมือrdateตามที่แนะนำในคำตอบของmanatworkแต่ด้วยโปรโตคอล SNTP -nและ-4ตัวเลือกIPv4 บน:

# just print synced time, not set
rdate -n -4 -p time-a.nist.gov

# print and set synced time
sudo rdate -n -4 time-a.nist.gov

เครื่องมืออาจถูกติดตั้งบน Debian ด้วยวิธีนี้:

sudo apt-get install rdate

0

นอกจากการตอบกลับของ Tusharฉันยังต้องทำapt-get install ntpdateใน Ubuntu 14.04 ของฉันด้วย

การโพสต์เป็นคำตอบเพราะชื่อเสียงไม่เพียงพอสำหรับการแสดงความคิดเห็น


0

ฉันกำลังมองหาวิธีการรีเซ็ตนาฬิกาที่ไม่ใช่ ntp / ntpd ฉันชอบการแยกวิเคราะห์ส่วนหัวของ google.com แต่พบว่าไม่ได้ทำงานบน ubuntu ฉันคิดว่านี่จะใช้ได้กับ Raspberry Pi ด้วย

sudo date +"%d %b %Y %T %Z" -s "$(wget -qSO- --max-redirect=0 http://google.com 2>&1 | grep '^  Date:' | cut -d' ' -f 5-)"

ยังเป็นทางเลือกที่ใช้ขดแทน wget

sudo date +"%d %b %Y %T %Z" -s "$(curl -s --head http://google.com | grep '^Date:' | cut -d' ' -f 3-)"

ทดสอบกับ PI กับเครือข่ายมือถือและผลลัพธ์คล้ายกัน:

Using host & wget -- RCV: 1324 bytes SND: 581 bytes
Using host & curl -- RCV: 1318 bytes SND: 567 bytes

หมายเหตุฉันใช้โฮสต์เพื่อแก้ไข google.com เป็นที่อยู่ IP ดังนั้นฉันจึงสามารถเปิดเฉพาะ IP นั้นสำหรับช่วงเวลาของคำสั่งนี้ด้วย iptables

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