Article
· Mars 11 6m de lecture

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 ~]$ tzselect

Veuillez 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.

 1) Afrique

 2) Amériques

 3) Antarctique

 4) Océan Arctique

 5) Asie

 6) Océan Atlantique

 7) Australie

 8) Europe

 9) Océan Indien

10) Océan Pacifique

11) aucun - Je veux spécifier le fuseau horaire en utilisant le format Posix TZ.

#? 2

Veuillez sélectionner un pays.

 1) Anguilla                      19) République dominicaine            37) Pérou

 2) Antigua -et-Barbuda &     20) Équateur                          38) Porto Rico

 3) Argentine                 21) Salvador           39) Saint-Barthélemy

 4) Aruba         22) Guyane française         40) Saint-Christophe-et-Niévès;

 5) Bahamas       23) Groenland                41) Sainte-Lucie

 6) Barbade       24) Grenade                 42) Saint-Martin (Néerlandais)

 7) Bélize    25) Guadeloupe          43) Saint-Martin (Français)

 8) Bolivie       26) Guatemala          44) Saint-Pierre-et-Miquelon; 

 9) Brésil    27) Guyane             45) Saint Vincent

10) Canada        28) Haïti                  46) Suriname

11) Caraïbes NL   29) Honduras               47) Trinité-et-Tobago; 

12) Îles Caïmans  30) Jamaïque               48) Îles Turques et Caïques Est

13) Chili         31) Martinique             49) États-Unis

14) Colombie      32) Mexique                50) Uruguay

15) Costa Rica    33) Montserrat             51) Vénézuéla

16) Cuba          34) Nicaragua              52) Îles Vierges britanniques

17) Curaçao       35) Panama                 53) Îles Vierges (États-Unis)

18) Dominique     36) Paraguay

#? 49

Veuillez sélectionner l'une des régions de fuseau horaire suivantes.

 1) Est (la plupart des régions) 16) Centre-ND (Morton rural)

 2) Est-MI (la plupart des régions) 17) Centre-ND (Mercer)

 3) Eastern - KY (région de Louisville) 18) Montana (la plupart des régions)

 4) Est - KY (Wayne) 19) Montana - ID (sud); OR (est)

 5) Est - IN (la plupart des régions) 20) MST - Arizona (sauf Navajo)

 6) Est - IN (Da, Du, K, Mn)   21) Pacifique

 7) Est - IN (Pulaski) 22) Alaska (la plupart des régions)

 8) Est - IN (Crawford) 23) Alaska - région de Juneau

 9) Est - IN (Pike) 24) Alaska - région de Sitka

10) Est - IN (Switzerland) 25) Alaska - Île d'Annette

11) Centre (la plupart des régions) 26) Alaska - Yakutat

13) Centre - IN (Perry) 27) Alaska (ouest)

13) Centre - IN (Starke)           28) Îles Aléoutiennes

14) Centre - MI (frontière du Wisconsin) 29) Hawaï

15) 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?

1) Oui

2) Non

#? 1


Vous pouvez rendre cette modification permanente par vous-même en ajoutant la ligne

      TZ='America/New_York'; export TZ

dans 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.

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer