เราจะตั้งค่าเขตเวลาเริ่มต้นของระบบโดยอัตโนมัติใน Linux โดยใช้อินเทอร์เน็ตได้อย่างไร? อย่างที่ฉันเห็นเซิร์ฟเวอร์ NTP สามารถอัปเดตเวลาเท่านั้น แต่ไม่ใช่เขตเวลา มีเซิร์ฟเวอร์ใดบ้างที่สามารถเปลี่ยนเขตเวลาได้?
เราจะตั้งค่าเขตเวลาเริ่มต้นของระบบโดยอัตโนมัติใน Linux โดยใช้อินเทอร์เน็ตได้อย่างไร? อย่างที่ฉันเห็นเซิร์ฟเวอร์ NTP สามารถอัปเดตเวลาเท่านั้น แต่ไม่ใช่เขตเวลา มีเซิร์ฟเวอร์ใดบ้างที่สามารถเปลี่ยนเขตเวลาได้?
คำตอบ:
ผมเขียนโปรแกรมในขณะที่ที่ผ่านมาที่ไม่นี้: tzupdate
คุณสามารถดูว่ามันจะตั้งเขตเวลาของคุณเป็น (โดยไม่ต้องตั้งจริง) โดยการเรียกใช้tzupdate -p
:
$ tzupdate -p
Europe/Malta
คุณสามารถตั้งค่าเป็นของจริงโดยการเรียกใช้tzupdate
เป็นรูท
$ sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013
สิ่งนี้ทำงานโดย:
/etc/localtime
เพื่อชี้ไปที่ไฟล์ zoneinfo สำหรับเขตเวลานั้นนี่เป็นเธรดเก่า แต่ยังคงเกี่ยวข้องกับ kubuntu 1710 ซึ่งไม่เปลี่ยนเขตเวลาโดยอัตโนมัติ ฉันใช้โซลูชันของ Chris Down สำหรับ tzupdate แต่ต้องแน่ใจว่ามันถูกทริกเกอร์เมื่อระบบพยายามเชื่อมต่อกับเครือข่าย (wifi หรืออื่น ๆ ) สมมติว่าคุณใช้ตัวจัดการเครือข่าย
เปิดเทอร์มินัลก่อน
ติดตั้ง tzupdate
sudo apt install python-pip
pip install -U tzupdate
จากนั้นตรวจสอบให้แน่ใจว่าผู้ใช้ทุกคนสามารถเข้าถึงได้
sudo cp -R ~/.local/lib/python2.7/site-packages/. /usr/lib/python2.7/.
sudo cp /home/marta_riba/.local/bin/tzupdate /usr/local/bin/tzupdate
ทดสอบว่ามันใช้งานได้
sudo tzupdate
จากนั้นเราต้องทำคือให้แน่ใจว่าผู้ใช้ทุกคนสามารถเข้าถึงได้
sudo su -
tzupdate
ซึ่งทำให้คุณอยู่ในฐานะรูทแล้วตรวจสอบว่าคำสั่งเปลี่ยนเขตเวลาของคุณ จากนั้นตรวจสอบให้แน่ใจว่าคุณออกเพื่อกลับสู่ผู้ใช้ปกติ
exit
ตรวจสอบให้แน่ใจว่า tzupdate สามารถเรียกใช้ด้วย sudo โดยไม่ต้องใช้รหัสผ่าน นี่เป็นสิ่งจำเป็นสำหรับขั้นตอนต่อมาเมื่อเราเรียกสิ่งนี้จาก networkmanager ซึ่งทำงานในพื้นหลังพิมพ์สิ่งนี้ใน terminal เพื่อแก้ไขไฟล์ sudoers
sudo visudo
เพิ่มบรรทัดนี้ในตอนท้ายของไฟล์
ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
กด CTRL-X จากนั้นกด Y แล้วกด ENTER เพื่อบันทึกการเปลี่ยนแปลง
จากนั้นเราจะตรวจสอบให้แน่ใจว่า NetworkManager เรียกสิ่งนี้เสมอหลังจากเรียกการเปลี่ยนแปลงการเชื่อมต่อเครือข่าย (เช่นเมื่อเชื่อมต่อกับ wifi) สำหรับสิ่งนี้เราสร้างไฟล์ชื่อ tzupdate ในโฟลเดอร์ dispatcher.d ซึ่งเรียก sudo tzupdate ไฟล์นั้นต้องการการอนุญาตให้ใช้งานได้
echo 'sudo tzupdate'| sudo tee /etc/NetworkManager/dispatcher.d/99-tzupdate
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-tzupdate
โปรดทราบว่า NetworkManager จะเรียกใช้งาน sudo (เช่น sudo tzupdate) ซึ่งโดยทั่วไปแล้วจะขอรหัสผ่าน
อาจมีวิธีที่ดีกว่าในการทำเช่นนี้ให้ NetworkManager โทรหานี้เฉพาะเมื่อมันทำให้การเชื่อมต่อเพิ่มขึ้นและไม่ลดลง (ตามที่กล่าวมาจะทำ) - ฉันลองใส่สคริปต์ใน / etc / network / if-up .d แต่สิ่งนี้ไม่ได้ผลสำหรับฉัน
เพื่อทดสอบสิ่งนี้ใน Kubuntu - เปลี่ยนเขตเวลาท้องถิ่นของคุณเป็นอย่างอื่น (ไปที่วันที่ plasmoid ในทาสก์บาร์ของคุณและคลิกขวาและเลือก 'ปรับวันที่ / เวลา' และ 'โซนเวลา' จากแท็บ)
ปิด WiFi และเปิดใหม่ - คุณจะเห็นว่าเมื่อเชื่อมต่อกับ WiFi ดูเหมือนว่าจะรอประมาณ 30 วินาทีแล้วจึงเปลี่ยนเขตเวลาของคุณให้สำเร็จ
โปรดทราบว่าสิ่งนี้ยังไม่ได้รับการทดสอบด้วย wifi ที่ต้องป้อนรหัสผ่านบนหน้าเว็บ หวังว่าการดำเนินการในตอนท้ายของการเชื่อมต่อเครือข่ายควรให้เวลาเพียงพอสำหรับผู้ใช้ในการป้อนข้อมูลประจำตัว - มิฉะนั้นอาจต้องใช้ tweaking เพิ่มเติม (ตรวจสอบว่ามีการเชื่อมต่ออยู่ให้ตรวจสอบว่าคุณสามารถเชื่อมต่ออินเทอร์เน็ตได้หรือไม่ เป็นเวลา X วินาทีหากไม่สามารถเชื่อมต่ออินเทอร์เน็ตแล้วลองใหม่ Y ครั้ง
ยังไม่ชัดเจนว่าคุณหมายถึงอะไรโดย "อัพเดตเขตเวลา"
Unix และ Linux ให้เวลาตามจำนวนวินาทีตั้งแต่ 1 มกราคม 1970, 00:00 UTC นาฬิการะบบ Unix จึงเป็นเขตเวลาที่เป็นอิสระ เขตเวลาไม่มีอยู่ในเคอร์เนล Linux มันก็ต่อเมื่อแอปพลิเคชัน userspace แสดงเวลาที่จำนวนวินาทีตั้งแต่ 1970 ถูกตีความโดยใช้เขตเวลา โดยทั่วไปแล้วการตีความนี้กระทำผ่านฟังก์ชั่นห้องสมุด C เขตเวลาถูกเลือกโดยTZ
ตัวแปรสภาพแวดล้อม คำจำกัดความของเขตเวลา (ซึ่งประกอบด้วยชื่อเขตเวลา, ชดเชยจาก UTC, วันที่ที่มีการบันทึกเวลาตามฤดูกาลและการชดเชยระหว่าง DST) เป็นส่วนหนึ่งของ GNU libc และมักจะรวมอยู่ใน Linux distributions เป็นแพ็คเกจ "tzdata" ดังนั้นการปรับปรุงคำจำกัดความเขตเวลาเป็นเรื่องของการทำงานapt-get upgrade
,yum update
หรือดำเนินการบางอย่างที่คล้ายกัน
โปรดทราบว่าซอฟต์แวร์บางตัวเช่น Java มีไฟล์คำจำกัดความของเขตเวลาของตัวเองซึ่งจะต้องมีการอัพเดตแยกต่างหาก
NTP ติดตามจำนวนวินาทีตั้งแต่ 1 มกราคม 1900, เวลา UTC ดังนั้น NTP เช่นเคอร์เนล Unix จึงไม่มีแนวคิดของเขตเวลา