Como redefinir permanentemente o fuso horário no Debian?

29

A Dreamhost parece pensar que gostamos de PDT, apesar de estar no Centro-Oeste. Como altero o fuso horário?

elynnaie
fonte

Respostas:

73

Uma ferramenta que achei mais fácil de usar é dpkg-reconfigure. Usar:

sudo dpkg-reconfigure tzdata

Você terá várias opções, incluindo algumas que não estão incluídas tzselect.

Ynhockey
fonte
Um benefício de fazer dessa maneira é que você está fazendo de maneira reproduzível e limita as chances de fazer algo errado, como colocar um fuso horário que não existe.
Mogget
1
Isso é bom, mas se você precisar de uma opção não interativa (e, portanto, programável), veja minha resposta abaixo.
Mc0e
14

Presumivelmente, isso é um pouco tarde para o OP e mais direcionado para outros pesquisadores que chegam aqui.

Se você precisar de uma solução não interativa, tente esta solução alterando o fuso horário com dpkg-reconfigure tzdata e debconf-set-selections

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

Você pode descobrir seu fuso horário procurando em / usr / share / zoneinfo. De fato, o comando dpkg-reconfigure acima copia o arquivo apropriado de lá para / etc / localtime. Eu costumava fazer isso manualmente, e parece funcionar bem.

Não se surpreenda se os processos de execução longa não receberem a alteração. por exemplo, registros de data e hora do Apache vêm à mente. Considere se isso importa e, portanto, se você precisa reiniciar os processos em execução ou mesmo reiniciar.

mc0e
fonte
3
Cuidado para que isso funcione, é um requisito que /etc/localtimeainda não existe. Se ele existir e for um link para /usr/share/zoneinfo/whatever, será usado como base e /etc/localtimeserá atualizado de acordo com a substituição das alterações.
Multisync
11

Para editá-lo de maneira não interativa nas versões recentes do Debian e Ubuntu (Stretch / Xenial etc.), você precisa removê-lo /etc/localtimetambém, caso contrário, /etc/timezoneserá substituído.

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

Esta resposta é baseada na resposta do mc0e '. Não posso adicionar um comentário com minha reputação.

Vojta Myslivec
fonte
3

TL; DR

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

onde Etc/UTCé o seu fuso horário preferido que você encontrou usando tzselect.

Versão mais longa

Quando você está usando

dpkg-reconfigure tzdata

as informações do fuso horário não são mantidas após a reinicialização. Você pode verificar suas configurações com

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

Se você estiver apenas atualizando /etc/timezone, a atualização não será consistente /etc/localtime, portanto , é melhor executar

tzconfig

Use tzselectpara descobrir quais fusos horários realmente existem (ou simplesmente navegar no /usr/share/zoneinfodiretório).

Nos sistemas POSIX, isso TZdeve ter precedência antes /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

O uso direto TZ pode economizar muitas chamadas do sistema, pois as funções relacionadas a data / hora usadas com freqüência precisam acessar o sistema de arquivos sempre que algum programa solicitar a data atual. É uma micro-otimização, mas bastante simples.

Tombart
fonte
Você está certo de que a exportação TZno seu arquivo de perfil cria um link simbólico? Isso não parece verdade na minha experiência. Talvez você quisesse dizer "Também certifique-se de criar o link simbólico ..."?
amn
1
@ amn Não, isso não criará um link simbólico, tentei esclarecer isso. Mas $TZvariável é lido por glibcfunções: gnu.org/software/libc/manual/html_node/TZ-Variable.html
Tombart
não deveria ser echo "TZ=Etc/UTC" >> /etc/environment? você está perdendo TZ=parte ... (se alguém ainda está executando versões antigas do debian). Além disso, o material não-interativo como daemons ainda usaria /etc/localtimea versão em vez de um conjunto de TZ...
Matija Nalis
@MatijaNalis Sim, você está certo. Obrigado pela correção!
Tombart 28/09