Установка часового пояса с помощью автоматического скрипта


20

Я пишу сценарии для автоматизации установки новых установок slicehost. В идеальном мире, после того, как я запустил сценарий, он просто запустился, без моего внимания. Я добился успеха, за одним исключением.

Как мне установить часовой пояс, в постоянном (выживающем, перезагрузке) и нормальном (настроить на стандартное и летнее время, чтобы не просто принудительно устанавливать дату) ... способом, который не требует ввода от меня?

В настоящее время я использую

 dpkg-reconfigure tzdata

Похоже, что это никак не влияет на параметры. Это требует пользовательского ввода.


РЕДАКТИРОВАТЬ: я редактирую здесь, а не комментирую, так как комментарии, кажется, не позволяют блоки кода.

Вот фактический код, с которым я закончил, на основе комментария Рудедога ниже. Я также заметил, что это не обновляет / 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
Вы должны быть символическими ссылками, что не копирование
Zypher

1
Он использует Debian. dpkg-reconfigure tzdataделает копию, а не символическую ссылку. Я считаю, что причина в том, что / usr / share не может быть смонтирован во время загрузки.
Rudedog

Согласно техническому разделу man-страницы tzconfig для Debian:> Работа, выполняемая tzconfig, на самом деле довольно проста. Он просто обновляет ссылку / etc / localtime, чтобы указывать на правильный часовой пояс, установленный в / usr / share / zoneinfo /.
Brent

1
tzconfig устарела для lenny в пользу dpkg -configure tzdata и фактически ничего не будет делать. Вы можете проверить, что он копирует вместо символических ссылок, запустив dpkg-reconfigure tzdata, и посмотрите на результат.
Rudedog


3

Попробуй это:

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

Хотя код ценится, у него всегда должно быть сопутствующее объяснение. Это не должно быть долго, но ожидается.
Петер - Восстановить Монику

3
Этот метод больше не работает bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
Питер Гибсон,

2

Обновите /etc/localtimeсимволическую ссылку, чтобы указать правильный часовой пояс в/usr/share/zoneinfo/


Обратите внимание, что если вы используете символическую ссылку, а ваша /usrсмонтирована в отдельном разделе, все, что запускается до /usrмонтирования, не будет иметь правильный часовой пояс. Сегодня большинство дистрибутивов, включая Debian, копируют, а не символьные ссылки.
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 для ответа на этот вопрос, поэтому вам нужно предварительно заполнить его. Есть несколько способов сделать это, самый простой - это проследить за ответом во время установки . Кроме того, вы можете настроить базу данных по умолчанию для использования debconf, смотрите debconf(7)страницу руководства, чтобы узнать, как это сделать.


-2

Также убедитесь, что ntpd установлен и работает.

yum install ntpd
ntpdate pool.ntp.org
service ntpd start
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.