การตั้งค่าเขตเวลาด้วยสคริปต์อัตโนมัติ


20

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

ฉันจะตั้งค่าเขตเวลาในการรีบูตแบบถาวร (เอาตัวรอดใหม่ได้) และมีสติ (ปรับให้เหมาะกับเวลามาตรฐานและการปรับเวลาตามฤดูกาลดังนั้นไม่มีการบังคับวันที่) ... ลักษณะที่ไม่ต้องการข้อมูลจากฉัน

ขณะนี้ฉันกำลังใช้

 dpkg-reconfigure tzdata

ดูเหมือนจะไม่มีวิธีใดที่จะบังคับพารามิเตอร์ให้อยู่ในนั้น มันต้องการให้ผู้ใช้ป้อนข้อมูล


แก้ไข: ฉันกำลังแก้ไขที่นี่แทนที่จะแสดงความคิดเห็นเนื่องจากความคิดเห็นดูเหมือนจะไม่อนุญาตการบล็อกโค้ด

นี่คือรหัสจริงที่ฉันได้รับตามความคิดเห็นของ Rudedog ด้านล่าง ฉันยังสังเกตเห็นว่านี่ไม่ได้อัปเดต / etc / timezone ฉันไม่แน่ใจว่าใครใช้สิ่งนั้น แต่ในกรณีที่ใครทำฉันก็ตั้งค่าเช่นกัน

TIMEZONE="America/Los_Angeles"      
echo $TIMEZONE > /etc/timezone                     
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime   # This sets the time

คำตอบ:


18

คุณควรทำสิ่งนี้ด้วย

cp /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

แทนเขตเวลาที่เหมาะสมในคำสั่งด้านบน


1
คุณควรจะ symlinking ที่ไม่ได้คัดลอกมากกว่า
Zypher

1
เขาใช้ Debian dpkg-reconfigure tzdataทำสำเนาไม่ใช่ symlink ฉันเชื่อว่าเหตุผลเป็นเพราะ / usr / share อาจไม่ได้ติดตั้งในเวลาบูต
Rudedog

ตามส่วนทางเทคนิคของ manztzconfig สำหรับ Debian:> งานที่ทำโดย tzconfig นั้นง่ายมาก เพียงอัปเดตลิงค์ / etc / localtime ให้ชี้ไปที่เขตเวลาที่ถูกต้องที่ติดตั้งใน / usr / share / zoneinfo /
รนต์

1
tzconfig ถูกคัดค้านจาก lenny เพื่อสนับสนุน dpkg-reconfigure tzdata และจะไม่ทำอะไรเลย คุณสามารถตรวจสอบได้ว่ามันจะคัดลอกแทน symlinks โดยใช้ dpkg-reconfigure tzdata และดูผลลัพธ์
Rudedog

3

ใน Ubuntu 12.04 ต่อไปนี้เป็นเคล็ดลับสำหรับฉัน:

# http://manpages.ubuntu.com/manpages/precise/man7/debconf.7.html
export DEBCONF_NONINTERACTIVE_SEEN=true DEBIAN_FRONTEND=noninteractive
echo "Europe/Berlin" > /etc/timezone
dpkg-reconfigure tzdata

1
วิธีนี้ดูเหมือนจะไม่ทำงานอีกต่อไปข้อบกพร่อง launchpad.net/ubuntu/+source/tzdata/+bug/1554806
Peter Gibson

ทำงานบน Ubuntu 14.04
SUB

3

ลองสิ่งนี้:

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

แม้ว่ารหัสจะได้รับการชื่นชม แต่ก็ควรมีคำอธิบายประกอบ สิ่งนี้ไม่จำเป็นต้องยาว แต่ก็คาดว่า
peterh กล่าวว่าคืนสถานะโมนิก้า

3
วิธีนี้ดูเหมือนว่าจะไม่ทำงานอีกต่อไปข้อบกพร่อง launchpad.net/ubuntu/+source/tzdata/+bug/1554806
Peter Gibson

2

อัปเดต/etc/localtimesymlink ให้ชี้ไปที่การแก้ไขเขตเวลาใน/usr/share/zoneinfo/


โปรดทราบว่าถ้าคุณใช้ symlink และคุณ/usrถูกเมาท์บนพาร์ติชันแยกต่างหากสิ่งที่เริ่มต้นก่อนที่จะ/usrถูกเมาท์จะไม่มีเขตเวลาที่ถูกต้อง distros ส่วนใหญ่วันนี้รวมถึง Debian คัดลอกมากกว่า symlink
Rudedog

1

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

#Set time zone and time
echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
echo "tzdata tzdata/Zones/Europe select London" | debconf-set-selections
TIMEZONE="Europe/London"
echo $TIMEZONE > /etc/timezone
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime
/usr/sbin/ntpdate pool.ntp.org

0

tzdataใช้ debconf เพื่อตอบคำถามนั้นดังนั้นคุณจำเป็นต้องเติมเงินล่วงหน้า มีหลายวิธีที่จะทำเช่นนี้เป็นเรื่องที่ง่ายที่สุดคือการpreseed คำตอบระหว่างการติดตั้ง นอกเหนือจากที่คุณสามารถตั้งค่าฐานข้อมูลเริ่มต้นสำหรับ debconf เพื่อใช้ดูdebconf(7)manpage สำหรับวิธีการทำ


-2

ตรวจสอบให้แน่ใจด้วยว่า ntpd ได้รับการติดตั้งและใช้งานอยู่

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