Comment réinitialiser définitivement le fuseau horaire dans Debian?

29

Dreamhost semble penser que nous aimons la PDT, bien que nous soyons dans le Midwest. Comment changer le fuseau horaire?

elynnaie
la source

Réponses:

73

Un outil que j'ai trouvé plus facile à utiliser est dpkg-reconfigure. Utilisation:

sudo dpkg-reconfigure tzdata

Vous aurez une multitude de choix, dont certains qui ne sont pas inclus dans tzselect.

Ynhockey
la source
Un avantage de le faire de cette façon est que vous le faites de manière reproductible et limitez les chances de faire quelque chose de mal comme mettre un fuseau horaire qui n'existe pas.
Mogget
1
C'est une bonne chose, mais si vous avez besoin d'une option non interactive (et donc scriptable), voir ma réponse ci-dessous.
mc0e
14

C'est probablement un peu tard pour l'OP, et plus destiné aux autres chercheurs qui arrivent ici.

Si vous avez besoin d'une solution non interactive, essayez cette solution en changeant le fuseau horaire avec dpkg-reconfigure tzdata et debconf-set-selections

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

Vous pouvez déterminer votre fuseau horaire en fouillant dans / usr / share / zoneinfo. En fait, la commande dpkg-reconfigure ci-dessus copie le fichier approprié à partir de là vers / etc / localtime. J'avais l'habitude de le faire manuellement, et cela semble bien fonctionner.

Ne soyez pas trop surpris si les processus de longue durée ne prennent pas la relève. Par exemple, les horodatages du journal Apache me viennent à l'esprit. Déterminez si cela est important et, par conséquent, si vous devez redémarrer les processus en cours d'exécution ou même redémarrer.

mc0e
la source
3
Attention, pour que ça marche, c'est une exigence qui /etc/localtimen'existe pas déjà. S'il existe et est un lien logiciel vers /usr/share/zoneinfo/whatever, il est pris comme base et il /etc/localtimeest mis à jour en conséquence, écrasant vos modifications.
Multisync
11

Pour le modifier de manière non interactive sur les versions récentes de Debian et Ubuntu (Stretch / Xenial etc.), vous devez également le supprimer /etc/localtime, sinon /etc/timezoneil sera écrasé.

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

Cette réponse est basée sur la réponse de mc0e. Je ne peux pas ajouter de commentaire avec ma réputation.

Vojta Myslivec
la source
3

TL; DR

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

Etc/UTCest votre fuseau horaire préféré que vous avez trouvé en utilisant tzselect.

Version plus longue

Lorsque vous utilisez

dpkg-reconfigure tzdata

les informations de fuseau horaire ne sont pas conservées après le redémarrage. Vous pouvez vérifier vos paramètres avec

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

Si vous ne faites que la mise à jour /etc/timezone, la mise à jour ne sera pas cohérente /etc/localtime, il est donc préférable de l'exécuter

tzconfig

Utilisez tzselectpour savoir quels fuseaux horaires existent réellement (ou simplement parcourir le /usr/share/zoneinforépertoire).

Dans les systèmes POSIX, le TZdoit avoir priorité avant /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

L'utilisation directe TZ peut vous faire économiser de nombreux appels système car les fonctions liées à la date / heure fréquemment utilisées doivent accéder au système de fichiers chaque fois qu'un programme demande la date actuelle. C'est une micro-optimisation, mais assez simple.

Tombart
la source
Êtes-vous positif lorsque l'exportation TZdans votre fichier de profil crée un lien symbolique? Cela ne semble pas du tout vrai dans mon expérience. Peut-être que vous vouliez dire "Assurez-vous également de créer le lien symbolique ..."?
amn
1
@amn Non, cela ne créera pas de lien symbolique, j'ai essayé de clarifier cela. Mais la $TZvariable est lue par les glibcfonctions: gnu.org/software/libc/manual/html_node/TZ-Variable.html
Tombart
ne devrait-il pas en être ainsi echo "TZ=Etc/UTC" >> /etc/environment? il vous manque une TZ=partie ... (si quelqu'un exécute encore d'anciennes versions de Debian). De plus, des éléments non interactifs comme les démons utiliseraient toujours la /etc/localtimeversion au lieu d'un ensemble dans TZ...
Matija Nalis
@MatijaNalis Oui, vous avez raison. Merci pour la correction!
Tombart