ฉันจะรีเซ็ตโซนเวลาอย่างถาวรใน Debian ได้อย่างไร


29

Dreamhost ดูเหมือนจะคิดว่าเราชอบ PDT แม้จะอยู่ในมิดเวสต์ก็ตาม ฉันจะเปลี่ยนเขตเวลาได้อย่างไร

คำตอบ:


73

dpkg-reconfigureเครื่องมือที่ผมพบว่าให้ง่ายต่อการใช้งาน ใช้:

sudo dpkg-reconfigure tzdata

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


ข้อดีของการทำเช่นนี้คือคุณกำลังทำมันด้วยวิธีที่ทำซ้ำได้และ จำกัด โอกาสในการทำสิ่งผิดปกติเช่นการใส่เขตเวลาที่ไม่มีอยู่
Mogget

1
นี่คือสิ่งที่ดี แต่ถ้าคุณต้องการตัวเลือกที่ไม่ใช่แบบโต้ตอบ (และดังนั้นสคริปต์) ดูคำตอบของฉันด้านล่าง
mc0e

14

นี่น่าจะช้าไปหน่อยสำหรับ OP และมีไว้สำหรับผู้ค้นหารายอื่นที่มาถึงที่นี่

หากคุณต้องการโซลูชันที่ไม่โต้ตอบให้ลองใช้วิธีแก้ไขปัญหานี้จากการเปลี่ยนเขตเวลาด้วย dpkg-reconfigure tzdata และ debconf-set-selections

echo "Europe/Zurich" > /etc/timezone 
dpkg-reconfigure -f noninteractive tzdata

คุณสามารถกำหนดเขตเวลาของคุณได้ด้วยการเข้าไปใน / usr / share / zoneinfo ในความเป็นจริงคำสั่ง dpkg-reconfigure ด้านบนคัดลอกไฟล์ที่เหมาะสมจากที่นั่นไปยัง / etc / localtime ฉันเคยทำเช่นนั้นด้วยตนเองและดูเหมือนว่าจะทำงานได้ดี

อย่าแปลกใจถ้ากระบวนการที่ใช้เวลานานไม่สามารถรับการเปลี่ยนแปลงได้ เช่นการประทับเวลาบันทึก Apache มาถึงใจ พิจารณาว่ามีความสำคัญและด้วยเหตุนี้ไม่ว่าคุณจะต้องเริ่มกระบวนการทำงานใหม่หรือแม้กระทั่งรีบูต


3
ระวังให้สิ่งนี้ใช้งานได้มันเป็นข้อกำหนดที่/etc/localtimeไม่มีอยู่จริง หากมีอยู่และเป็น softlink ไประบบ/usr/share/zoneinfo/whateverจะใช้เป็นฐานและเป็นข้อมูล/etc/localtimeที่ได้รับการอัปเดตให้แทนที่การเปลี่ยนแปลงของคุณ
Multisync

11

หากต้องการแก้ไขแบบไม่โต้ตอบกับรุ่น Debian และ Ubuntu ล่าสุด (Stretch / Xenial เป็นต้น) คุณต้องลบออก/etc/localtimeเช่นกันมิฉะนั้น/etc/timezoneจะถูกเขียนทับ

echo 'Europe/Zurich' > /etc/timezone 
rm /etc/localtime
dpkg-reconfigure -f noninteractive tzdata

คำตอบนี้ขึ้นอยู่กับคำตอบ mc0e ' ฉันไม่สามารถเพิ่มความคิดเห็นด้วยชื่อเสียงของฉัน


3

TL; DR

echo "TZ=Etc/UTC" >> /etc/environment
tzconfig

ซึ่งเป็นเขตที่คุณต้องการคุณพบการใช้Etc/UTCtzselect

รุ่นที่ยาวกว่า

เมื่อคุณใช้

dpkg-reconfigure tzdata

ข้อมูลเขตเวลาจะไม่ถูกเก็บไว้หลังจากรีบูต คุณสามารถตรวจสอบการตั้งค่าของคุณด้วย

diff -s /etc/localtime /usr/share/zoneinfo/`cat /etc/timezone`

หากคุณกำลังอัปเดตเพียงอย่างเดียวการอัปเด/etc/timezoneตจะไม่สอดคล้องกัน/etc/localtimeดังนั้นจึงเป็นการดีกว่าที่จะดำเนินการ

tzconfig

ใช้tzselectเพื่อค้นหาโซนเวลาที่มีอยู่จริง (หรือเพียงแค่เรียกดู/usr/share/zoneinfoไดเรกทอรี)

ในระบบ POSIX TZควรมีความสำคัญก่อน/etc/localtime:

export TZ='Europe/Berlin'
$ date
Tue Apr 10 08:51:03 CEST 2018
export TZ='Pacific/Efate'
$ date
Tue Apr 10 18:28:33 +11 2018

การใช้โดยตรงTZ สามารถบันทึกการโทรของระบบจำนวนมากได้เนื่องจากฟังก์ชั่นที่เกี่ยวข้องกับวันที่ / เวลาที่ใช้บ่อยต้องเข้าถึงระบบไฟล์ในแต่ละครั้งที่บางโปรแกรมถามถึงวันที่ปัจจุบัน มันเป็นการเพิ่มประสิทธิภาพขนาดเล็ก แต่ค่อนข้างง่าย


คุณส่งออกเชิงบวกTZในไฟล์โปรไฟล์ของคุณสร้าง symlink หรือไม่? นั่นไม่ได้ฟังดูจริงเลยในประสบการณ์ของฉัน บางทีคุณอาจหมายถึง "ตรวจสอบให้แน่ใจว่าได้สร้าง symlink ... " หรือไม่
พฤศจิกายน

1
@ ไม่ได้, นั่นจะไม่สร้าง symlink, ฉันพยายามอธิบายให้ชัดเจน แต่ฟังก์ชั่น$TZอ่านตัวแปรglibc: gnu.org/software/libc/manual/html_node/TZ-Variable.html
Tombart

มันไม่ควรจะเป็นecho "TZ=Etc/UTC" >> /etc/environment? คุณหายไปTZ=ส่วนหนึ่ง ... (ถ้ากรณีที่มีคนยังคงใช้เวอร์ชันเดเบียนโบราณ) นอกจากนี้สิ่งที่ไม่โต้ตอบเช่น daemons จะยังคงใช้/etc/localtimeเวอร์ชันแทนที่จะเป็นหนึ่งชุดในTZ...
Matija Nalis

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