Bonjour Pinpin,
Le champ Timezone d'Autosys peut aussi bien contenir un timezone système qu'un timezone purement applicatif fourni par le produit.
- le TZ systeme
avantage : on se repose sur le zoneinfo qui est partagé par l'ensemble des utilisateurs du monde sur unix et java (qui dispose aussi de son propre zoneinfo). En cas de changement il faut recompiler le source au niveau système (ou plus généralement patcher la machine).
inconvénient : pas terrible avec un serveur windows qui dispose, évidemment, d'un autre systeme. Il faut scrupuleusement respecter le format et la casse. - l'autotimezone
avantage : c'est lié à l'application et donc entièrement dans notre périmètre, en cas de changement d'heure d'été il faudrait le changer soi-même (faut connaître la norme posix mais c'est assez simple).
inconvénient : il faut se tenir au courant des changements car ce n'est pas CA qui le fera, j'avais testé ce qui était installé en 4.5.1 et c'est plus d'un dizaine de fuseaux qui était faux. Pour les migrations, il ne faut surtout pas oublier cette partie.
Au moment de la définition, quelle est la meilleure solution ? Les 2 sont bonnnes mais je conseille fortement de ne pas les mélanger car le risque est de finalement disposer de 2 bases fausses.
Si c'est déjà défini, comment reconnaître le type de timezone ? Si le serveur est sur windows, le timezone est obligatoirement celui d'autosys. Par contre, si il est sur Unix, on peut le tester grace à la variable d'environnement TZ.
Je vais sur mon système et j'initialise le TZ, puis j'affiche la date. Imaginons que la définition du job utilise le fuseau horaire "
NewYork", je teste cette valeur :
TZ=NewYork;date
On obtient :
Fri Jan 22 07:54:46 GMT 2010
L'indication "GMT" signifie que le système utilise l'heure universelle, le fuseau horaire n'est donc pas reconnu.
On va donc faire une recherche dans la base de données d'Autosys en utilisant
autotimezone.
autotimezone -l | grep -i newyork
NewYork City US/Eastern
Ce n'est pas un timezone mais une simple ville qui est relié à US/Eastern, on rebondit sur cette info :
autotimezone -l | grep -i 'US/Eastern'
Atlanta City US/Eastern
Boston City US/Eastern
Detroit City US/Eastern
EasternTime Alias US/Eastern
Miami City US/Eastern
NewYork City US/Eastern
US/Eastern Zone EST5EDT
WashingtonDC City US/Eastern
On voit que différentes villes sont rattachées a US/Eastern et que US/Eastern est une zone, on peut ce fuseau comme TZ:
TZ=US/Eastern;date
Fri Jan 22 02:58:41 EST 2010
On peut éventuellement rebondir sur EST5EDT qui est le format Posix (format antérieur au zoneinfo) :
autotimezone -l | grep -i 'EST5EDT'
America/Nassau Zone EST5EDT
Canada/Eastern Zone EST5EDT
EST5EDT Zone EST5EDT
US/Eastern Zone EST5EDT
Comment trouver le timezone systeme ? c'est plus compliqué, mais heureusement on a le man :
man zoneinfo
File Formats zoneinfo(4)
NAME
zoneinfo - timezone information
DESCRIPTION
For notes regarding the zoneinfo timezones, see
/usr/share/lib/zoneinfo/src/README.
SunOS 5.10 Last change: 21 Jun 1999 1
C'est sommaire mais suffisant car on a directement le répertoire des sources, qui sont, comme tout source, des fichiers textes qui seront compilés :
ls -rtl /usr/share/lib/zoneinfo/src
total 1042
-rw-r--r-- 1 root bin 109669 Jul 16 2008 northamerica
-rw-r--r-- 1 root bin 350 Jul 16 2008 factory
-rw-r--r-- 1 root bin 108288 Jul 16 2008 europe
-rw-r--r-- 1 root bin 2961 Jul 16 2008 etcetera
-rw-r--r-- 1 root bin 57734 Jul 16 2008 australasia
-rw-r--r-- 1 root bin 82082 Jul 16 2008 asia
-rw-r--r-- 1 root bin 12533 Jul 16 2008 antarctica
-rw-r--r-- 1 root bin 26456 Jul 16 2008 africa
-rw-r--r-- 1 root bin 1503 Jul 16 2008 systemv
-rw-r--r-- 1 root bin 53772 Jul 16 2008 southamerica
-rw-r--r-- 1 root bin 19557 Jul 16 2008 solar89
-rw-r--r-- 1 root bin 19281 Jul 16 2008 solar88
-rw-r--r-- 1 root bin 19263 Jul 16 2008 solar87
-rw-r--r-- 1 root bin 1153 Jul 16 2008 pacificnew
-rw-r--r-- 1 root bin 4016 Jul 16 2008 backward
-rw-r--r-- 1 root bin 2947 Jul 16 2008 README
Un petit grep comme pour l'autotimezone :
grep -i new /usr/share/lib/zoneinfo/src/* | grep -i york
/usr/share/lib/zoneinfo/src/australasia:# Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald)
/usr/share/lib/zoneinfo/src/backward:Link America/New_York US/Eastern
/usr/share/lib/zoneinfo/src/europe:# A source at the British Information Office in New York avers that it's
/usr/share/lib/zoneinfo/src/northamerica:# in New York City (1869-10). His 1870 proposal was based on Washington, DC,
/usr/share/lib/zoneinfo/src/northamerica:# Any announcement from Asia would reach St. John's New York newsroom on a
/usr/share/lib/zoneinfo/src/northamerica:# USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON
/usr/share/lib/zoneinfo/src/northamerica:# US eastern time, represented by New York
/usr/share/lib/zoneinfo/src/northamerica:# New Hampshire, New Jersey, New York, North Carolina, Ohio,
/usr/share/lib/zoneinfo/src/northamerica:Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
/usr/share/lib/zoneinfo/src/northamerica:# - Dearborn and Ohio counties have been like America/New_York.
/usr/share/lib/zoneinfo/src/southamerica:# -- E O Cutler, _New York Times_ (1937-02-14), quoted in
On retrouve ce qu'indiquait l'autotimezone, à savoir que New-York est lié à la timezone US/Eastern. Le fichier est
backward, ce qui signifie que ce sont des liens d'anciens noms vers les nouveaux (à moins que NewYork réclame son indépendance, US/Eastern suffit très largement et son petit nom est
EST comme on le voit dans le résultat de date).
TZ=America/New_York;date
Fri Jan 22 03:02:53 EST 2010
Revenons à la partie autosys et à son format Posix, on va tester Paris pour voir le format de l'heure d'été :
autotimezone -l | grep -i paris
Europe/Paris Alias MET
Paris City Europe/Paris
Puis :
autotimezone -l | grep -i MET
Amsterdam City MET
Bern City MET
Budapest City MET
CentralEurope-West Zone MET-1METDST,M3.5.0/01:00:00,M9.5.0
Europe/Berlin Alias MET
Europe/Brussels Alias MET
Europe/Lisbon Alias MET
Europe/Madrid Alias MET
Europe/Paris Alias MET
Europe/Prague Alias MET
Europe/Rome Alias MET
Europe/Stockholm Alias MET
Europe/Vienna Alias MET
Europe/Zurich Alias MET
MET Zone MET-1METDST,M3.5.0,M10.5.0/03:00:00
MET est le fuseau pour Paris, le changement d'heure se fait le cinquième (5) dimanche (0) de mars (3) et se termine le dernier dimanche de d'Octobre a 3h. Pour un changement, c'est ce type de syntaxe qu'il faudra utiliser dans l'autotimezone.
J'espère avoir été assez exhaustif sur ce sujet. N'hésitez pas à commenter, on arrive bientôt à l'heure d'été et le sujet est moins simple qu'il n'y parait.
Eric.