Écrit par

Sales Engineer at InterSystems
Article Sylvain Guilbaud · Mars 11, 2024 6m read

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

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

Comments