ทำให้ dpkg- กำหนดค่า tzdata อีกครั้งโดยอัตโนมัติ


60

ฉันใช้หุ่นเชิดเพื่อดูแลกลุ่มเซิร์ฟเวอร์เดเบียน ฉันต้องการเปลี่ยนเขตเวลาของแต่ละเครื่องในคลัสเตอร์ dpkg-reconfigure tzdataวิธีเดเบียนที่เหมาะสมในการทำเช่นนี้คือการใช้ แต่ฉันสามารถเปลี่ยนได้ก็ต่อเมื่อฉันใช้กล่องโต้ตอบ มีวิธีที่จะทำให้สิ่งนี้เป็นแบบอัตโนมัติจากเปลือกหรือไม่ดังนั้นฉันสามารถเขียน Exec เพื่อทำให้มันง่ายขึ้นได้ไหม?

ถ้าไม่ฉันคิดว่าวิธีที่ดีที่สุดถัดไปอาจจะเป็นการกระจายหุ่น/etc/timezoneและ/etc/localtimeมีข้อมูลที่ถูกต้องทั่วทั้งคลัสเตอร์

การป้อนข้อมูลใด ๆ ชื่นชม!


โปรดทราบว่าคำตอบที่ได้รับการยอมรับในขณะนี้ได้รับการผิดตั้งแต่ 2017 คำตอบที่ถูกต้องคือคนนี้
Dan Dascalescu

คำตอบ:


92

คุณต้องระบุส่วนหน้าเป็น `แบบไม่โต้ตอบ 'และจะบันทึกการตั้งค่าปัจจุบันของคุณ

dpkg-reconfigure จะใช้การตั้งค่าระบบปัจจุบันเป็นข่าวประเสริฐดังนั้นเพียงแค่เปลี่ยนเขตเวลาของคุณในแบบที่คุณทำตามปกติ

เช่นสำหรับฉันที่จะเปลี่ยนเป็น "ยุโรป / ดับลิน" ที่ฉันอยู่:

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

เห็นได้ชัดว่าสิ่งนี้ช่วยให้คุณใช้หุ่นเชิด / cfengine ตามที่คุณต้องการแจกจ่าย / etc / timezone ด้วย


5
เพื่อเป็นทางเลือกแทนการเปลี่ยนการอนุญาตคุณสามารถทำสิ่งนี้ได้ echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
gorelative

3
เพื่อความสมบูรณ์อีกวิธีหนึ่งในการสะท้อนผ่าน sudo คือsudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
MartyMacGyver

6
หัวขึ้น! เวอร์ชันใหม่กว่าของ Ubuntu / Debian จะไม่ทำงานในลักษณะนี้อีกต่อไป พฤติกรรมเปลี่ยนไป bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
gertvdijk

21

เนื่องจากคำตอบที่ได้รับการยอมรับใช้งานไม่ได้ (Debian Jessie, เมษายน 2017) วิธีการแก้ไขจากลิงก์ความคิดเห็นของ @ gertvdijk ดูเหมือนจะทำงานได้ทันที:

sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata

1
นี่ควรเป็นคำตอบที่ได้รับการยอมรับในปัจจุบัน
Dan Dascalescu

เยี่ยมมากนี่ใช้การรักษา
infomaniac

5

คุณควรใช้debconf-set-selectionsเพื่อกำหนดค่าล่วงหน้า ติดตั้ง debconf-utils และรันdebconf-get-selections | grep tzdataบนระบบที่กำหนดค่าไว้อย่างถูกต้องเพื่อหาว่าจะตั้งค่าอย่างไร


1
สำหรับสิ่งที่ใช้ debconf ควรทำงานได้ แต่ tzdata ชอบ config จาก / etc / timezone ดังนั้นจึงไม่สามารถใช้งานได้กับระบบที่ติดตั้งแล้ว (เสียงดัง)
Elrond

3

นอกจากนี้คุณยังสามารถใช้สูตรจากหุ่นเชิดวิกิ (ที่หมดอายุแล้ว) ที่เก็บถาวรซึ่งแทนที่/etc/localtimeด้วยไฟล์ zoneinfo ที่เหมาะสมจาก/usr/share/zoneinfo: -

class timezone {
    package { "tzdata":
        ensure => installed
    }
}

class timezone::central inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Central",
    }
}

class timezone::eastern inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Eastern"
    }
}

class timezone::pacific inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Pacific"
    }
}

class timezone::mountain inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source =>
             "file:///usr/share/zoneinfo/US/Mountain"
    }
}

ฉันไม่แน่ใจว่า dpkg-reconfigure ทำอะไรเป็นพิเศษหรือไม่ แต่ฉันใช้สูตรด้านบนและทำงานได้อย่างสมบูรณ์


-3

มันง่ายมากและต้องพิมพ์คำสั่งและตอบคำถามง่าย ๆ
จากนั้นเรียกใช้:

/usr/bin/tzselect

1
man tzselect: "โปรดทราบว่า tzselect จะไม่เปลี่ยนเขตเวลาให้คุณใช้ 'dpkg-reconfigure tzdata' เพื่อให้บรรลุสิ่งนี้"
spinkus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.