Definindo o fuso horário com um script automatizado

20

Estou escrevendo scripts para automatizar a configuração de novas instalações de fatiahost. Em um mundo perfeito, depois que eu iniciei o script, ele seria executado, sem a minha atenção. Eu consegui, com uma exceção.

Como faço para definir o fuso horário de forma permanente (sobreviver a reinicialização) e sã (ajustar para o horário padrão e horário de verão, para não forçar apenas a data) ... de maneira que não exija minha contribuição?

Atualmente estou usando

 dpkg-reconfigure tzdata

Isso não parece ter nenhuma maneira de forçar parâmetros nele. Exige entrada do usuário.


EDIT: Estou editando aqui, em vez de comentar, pois os comentários parecem não permitir blocos de código.

Aqui está o código real com o qual acabei, com base no comentário de Rudedog abaixo. Notei também que isso não atualiza o / etc / fuso horário. Não tenho certeza de quem usa isso, mas, no caso de alguém usar, também estou definindo isso.

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

Respostas:

18

Você deve conseguir fazer isso com

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

Substitua o fuso horário apropriado no comando acima.

Rudedog
fonte
1
você deve ser um link simbólico que não copiando
Zypher
1
Ele está usando o Debian. dpkg-reconfigure tzdatafaz uma cópia, não um link simbólico. Eu acredito que a lógica é porque / usr / share pode não ser montado no momento da inicialização.
Rudedog
De acordo com a seção técnica da página de manual tzconfig do Debian:> O trabalho realizado pelo tzconfig é realmente bastante simples. Ele apenas atualiza o link / etc / localtime para apontar para o fuso horário correto instalado em / usr / share / zoneinfo /.
brent
1
O tzconfig está obsoleto no lenny em favor do dpkg-reconfigure tzdata e na verdade não fará nada. Você pode verificar se ele copia em vez de links simbólicos executando o dpkg-reconfigure tzdata e observe o resultado.
Rudedog
3

No Ubuntu 12.04, fiz o seguinte para mim:

# 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
Schlomo
fonte
1
Este método parece não funcionar mais bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
Peter Gibson
Funciona no Ubuntu 14.04.
SuB
3

Tente o seguinte:

echo "Europe/London" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
Amadu Bah
fonte
Embora o código seja apreciado, ele deve sempre ter uma explicação que o acompanha. Isso não precisa ser longo, mas é esperado.
peterh diz restabelecer Monica
3
Este método parece não funcionar mais bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
Peter Gibson
2

Atualize o /etc/localtimelink simbólico para apontar para corrigir o fuso horário no/usr/share/zoneinfo/

brent
fonte
Observe que, se você usar um link simbólico e o seu /usrestiver montado em uma partição separada, qualquer coisa iniciada antes da /usrmontagem não terá o fuso horário correto. A maioria das distros hoje, incluindo o Debian, copia em vez de link simbólico.
Rudedog
1

Eu me deparei com isso. Aqui está uma configuração completa de como fazer isso corretamente (é um agregado de comentários aqui e esta pergunta ):

#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
Synchro
fonte
0

tzdatausa o debconf para responder a essa pergunta, então você precisa preenchê-la previamente. Existem várias maneiras de fazer isso, o mais fácil é apresentar a resposta durante a instalação . Além disso, você pode configurar um banco de dados padrão para o debconf usar, consulte a página de debconf(7)manual de como fazer isso.

TRS-80
fonte
-2

Verifique também se o ntpd está instalado e em execução.

yum install ntpd
ntpdate pool.ntp.org
service ntpd start
Iraklis
fonte