Définition de la variable d'environnement TZ sur Linux
Définition de la variable d'environnement TZ sur Linux
La liste de contrôle de la mise à jour (Update Checklist) pour v2015.1 recommande de définir la variable d'environnement TZ sur les plates-formes Linux et renvoie à la page de manuel de tzset. Cette recommandation vise à améliorer les performances des fonctions de Cache liées à l'heure. Vous pouvez en savoir plus à ce sujet ici:
https://community.intersystems.com/post/linux-tz-environment-variable-not-being-set-and-impact-caché
La page de manuel de mon système de test CentOS 7 ( la même chose pour RHEL 6) indique ce qui suit:
“La fonction tzset() initialise la variable tzname à partir de la variable d'environnement TZ. Cette fonction est automatiquement appelée par les autres fonctions de conversion de l'heure qui dépendent du fuseau horaire.”
Alors, comment définissez-vous TZ? Comment affecte-t-elle les horaires sur un serveur Linux? Voici ce que nous pouvons apprendre:
Le fuseau horaire du système --
Pour mon test, j'utilise Ensemble 2016.1 sur un système virtuel CentOS. Tout d'abord, vérifions le fuseau horaire du système. Pour cela, il faut utiliser l'utilitaire system-config-date.
Qu'en est-il de "L'horloge du système utilise l'UTC" ? Il s'agit de l'horloge matérielle du serveur. Sur un serveur dédié, l'UTC est très répandu. Lorsque Linux est utilisé dans une configuration à double démarrage avec Windows, ce n'est pas le cas (Windows utilise l'heure locale pour son horloge système).
Comme les configurations à double démarrage ne sont pas courantes pour les installations de Cache' et d'Ensemble, la question n'est pas abordée plus en détail. Les idées clés ici consistent à régler le fuseau horaire du système sur celui du serveur et à régler correctement l'heure de l'horloge matérielle.
L'heure et la date vues par les utilisateurs –
Jetons un coup d'œil. Voici un extrait de ma session de Terminal:
Tout semble en ordre. Mon processus shell (qui exécute la commande date) et mon processus Cache' affichent la même heure à l'exception des quelques secondes nécessaires à la saisie de la commande WRITE.
Définition de la variable TZ --
Maintenant, définissons TZ dans l'environnement. La commande à utiliser est tzselect. Voici un script de la sortie de la commande pour définir TZ
[ehemdal@localhost ~]$ tzselectVeuillez indiquer un lieu afin que les règles relatives au fuseau horaire puissent être définies correctement.
Veuillez sélectionner un continent ou un océan.
Afrique
Amériques
Antarctique
Océan Arctique
Asie
Océan Atlantique
Australie
Europe
Océan Indien
Océan Pacifique
aucun - Je veux spécifier le fuseau horaire en utilisant le format Posix TZ.
#? 2
Veuillez sélectionner un pays.
Anguilla 19) République dominicaine 37) Pérou
Antigua -et-Barbuda & 20) Équateur 38) Porto Rico
Argentine 21) Salvador 39) Saint-Barthélemy
Aruba 22) Guyane française 40) Saint-Christophe-et-Niévès;
Bahamas 23) Groenland 41) Sainte-Lucie
Barbade 24) Grenade 42) Saint-Martin (Néerlandais)
Bélize 25) Guadeloupe 43) Saint-Martin (Français)
Bolivie 26) Guatemala 44) Saint-Pierre-et-Miquelon;
Brésil 27) Guyane 45) Saint Vincent
Canada 28) Haïti 46) Suriname
Caraïbes NL 29) Honduras 47) Trinité-et-Tobago;
Îles Caïmans 30) Jamaïque 48) Îles Turques et Caïques Est
Chili 31) Martinique 49) États-Unis
Colombie 32) Mexique 50) Uruguay
Costa Rica 33) Montserrat 51) Vénézuéla
Cuba 34) Nicaragua 52) Îles Vierges britanniques
Curaçao 35) Panama 53) Îles Vierges (États-Unis)
Dominique 36) Paraguay
#? 49
Veuillez sélectionner l'une des régions de fuseau horaire suivantes.
Est (la plupart des régions) 16) Centre-ND (Morton rural)
Est-MI (la plupart des régions) 17) Centre-ND (Mercer)
Eastern - KY (région de Louisville) 18) Montana (la plupart des régions)
Est - KY (Wayne) 19) Montana - ID (sud); OR (est)
Est - IN (la plupart des régions) 20) MST - Arizona (sauf Navajo)
Est - IN (Da, Du, K, Mn) 21) Pacifique
Est - IN (Pulaski) 22) Alaska (la plupart des régions)
Est - IN (Crawford) 23) Alaska - région de Juneau
Est - IN (Pike) 24) Alaska - région de Sitka
Est - IN (Switzerland) 25) Alaska - Île d'Annette
Centre (la plupart des régions) 26) Alaska - Yakutat
Centre - IN (Perry) 27) Alaska (ouest)
Centre - IN (Starke) 28) Îles Aléoutiennes
Centre - MI (frontière du Wisconsin) 29) Hawaï
Centre - ND (Oliver)
#? 1
Les informations suivantes ont été données:
États-Unis Est (la plupart des régions)Par conséquent, TZ='America/New_York' sera utilisé.
L'heure locale est maintenant: Mar 31 mai 11:21:04 EDT 2016.
Le temps universel est maintenant: Mar 31 mai 15:21: 04 UTC 2016.
Les informations ci-dessus sont-elles correctes?
Oui
Non
#? 1
Vous pouvez rendre cette modification permanente par vous-même en ajoutant la ligne
TZ='America/New_York'; export TZdans le fichier '.profile' dans votre répertoire personnel, puis déconnectez-vous et reconnectez-vous.
Voici à nouveau la valeur de TZ, cette fois sur la sortie standard, afin que vous
puissiez utiliser la commande /usr/bin/tzselect dans des scripts shell:
America/New_York
[ehemdal@localhost ~]$
Le fichier ~/.profile (s'il existe) est exécuté lorsque vous vous connectez et définit la variable TZ pour vous. Vous pouvez utiliser un fichier d'initialisation différent si vous utilisez un shell autre que /bin/sh ou /bin/bash. J'ai défini cette variable et je me suis reconnecté. Si vous mettez à jour un fichier comme /etc/profile, vous pouvez appliquer cela à tous les utilisateurs.
Ici, vous pouvez voir que la TZ est définie pour mon utilisateur (ehemdal), mais PAS pour l'utilisateur root.
TZ et l'heure et la date vues par les utilisateurs –
Que se passe-t-il si un utilisateur se connecte à votre serveur depuis un autre fuseau horaire ? La variable TZ permet de conserver l'heure locale de l'utilisateur tout en laissant la gestion des fuseaux horaires et de l'heure d'été au système d'exploitation. Cela affecte également l'heure utilisée par Cache'. Par exemple, j'ai décidé de changer mon fuseau horaire pour celui d'Honolulu.
Voici deux captures d'écran qui montrent le résultat.
Le processus de mon utilisateur a défini le fuseau horaire sur Pacifique/Honolulu. Le processus root n'a pas défini de TZ (il utilise donc le fuseau horaire du système America/New_York). Au niveau du système d'exploitation (avec la commande date), l'affichage reflète l'heure locale pour les deux utilisateurs. La commande date reflète l'heure locale de l'utilisateur (HST pour l'utilisateur ehemdal et EDT pour root). Comme $HOROLOG obtient sa valeur à partir de l'heure du système d'exploitation disponible pour le processus utilisateur, les valeurs de $H sont DIFFÉRENTES pour les deux utilisateurs.
J'ai choisi l'heure d'Honolulu comme exemple intéressant car Hawaï n'observe pas l'heure d'été. En paramétrant correctement TZ pour tous les utilisateurs, l'heure locale peut "avancer et reculer" pour les utilisateurs qui observent l'heure d'été, et rester stable pour ceux qui n'observent pas l'heure d'hiver.
Comments
Dans un environnement conteneurisé, vous pouvez gérer l'heure de votre conteneur via la variable TZ ou via les répertoires /etc/timezone et /etc/localtime :
environment:
- TZ=Europe/Parisvolumes:
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"Vous pouvez retrouver des exemples complets ici :