The UNIX and Linux Forums  


Go Back   Les systèmes UNIX et Linux Forums > Top Forums > UNIX pour les nuls Questions et réponses > Réponses aux questions fréquemment posées > Conseils et Didacticiels
.
google unix.com



Conseils et Didacticiels Des articles de nos utilisateurs.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
La compréhension de ce Makefile the_learner High Level Programming 5 06-14-2007 02:55 AM
Besoin d'aide pour comprendre une commande Unix chris86 UNIX pour les nuls Questions et réponses 6 10-10-2006 04:35 PM
Un peu d'aide pour comprendre FIFOs? Deckard Linux 0 11-01-2005 01:46 PM
besoin de plus de compréhension de init.d jigarlakhani UNIX for Advanced & Expert Users 1 09-20-2002 04:11 PM

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9131
Comprendre les temps Unix

Internal Time
En interne, un système Unix soutient que le nombre de secondes depuis l'époque Unix. L'époque Unix a été à minuit le 1 er janvier 1970 UTC. Dans le fuseau horaire de l'Est des États-Unis qui a été le 31 décembre 1969 à 19:00. Comme je commence cet article, le temps est 1171733878. Je suis utilisant le protocole NTP (Network Time Protocol) pour maintenir l'horloge de mon ordinateur à la synchronisation. Ainsi, à l'instant précis que mon ordinateur 1171733878 pensé qu'il était, sans doute même que la vôtre. Chaque ordinateur doit être en accord à quelle heure il est. Il n'est pas question de fuseau horaire dans lequel réside l'ordinateur ou le fuseau horaire dans lequel vous résidez. Si je l'avais écrit dans un fichier pendant que la deuxième, Unix aurait enregistré la modification que 1171733878.

Unix a été traditionnellement une fois signé 32 bits. Cela signifie que la durée maximale est 2147483647, qui, dans l'Est des États-Unis TimeZone serait Jan 18, 2038 à 22:14:07. Le plan est de développer pour ce à un nombre entier 64 bits avant. Unix secondes comptent présenter un par un. Après 1171733878, la prochaine seconde que mon système de savoir est 1171733879. Une fois qu'il est synchronisée, NTP œuvres de raccourcir ou d'allonger une seconde. Je peux obtenir le temps en composant le système de temps d'appel (). Si je veux quelque chose de mieux que quelques secondes, la prochaine est plus précise sur les interfaces de l'appel système fois (). fois () le principal objectif est d'obtenir une structure de données relatives à l'utilisation du système. Mais le code de retour est aussi utile ... il est l'heure de l'horloge tiques. À rebours à partir de certains point arbitraire dans le passé (souvent le temps de démarrage) et l'avance chaque fois que le noyau de routine horloge tourne. Combien de clock ticks par seconde peut varier. Vous pouvez appeler sysconf (_SC_CLK_TCK) pour savoir votre valeur. 100 est la valeur commune de ces jours. Des systèmes plus anciens utilisés 60. 100 et 60 sont les deux seules valeurs que j'ai vu. Horloge tiques sont également retourné comme un entier signé. Ainsi, après environ un an, le nombre va revenir à zéro. Autres que de renversement, à rebours avance également un par un. (Clock tiques sont souvent appelées "jiffies" par les gens de Linux.) Il ya également un autre système d'appel, gettimeofday () qui retourne le temps écoulé depuis l'époque Unix en secondes et microsecondes. gettimeofday () est nécessaire à l'existence et à la microseconde utilisation de précision. Toutefois, la précision est explicitement spécifié. Le micro ne pas avancer un par un, dans tout système que j'ai vu. Je suppose que les systèmes Unix sont plutôt bonnes avec les centièmes de seconde et peut-être même est millisecondes certains cas. Mais je ne satisferait pas au-delà de cette précision.

Lisible Timestamps
Maintenant que nous savons comment Unix conserve temps, nous allons passer à une autre question: Comment faire pour afficher le temps d'un utilisateur. Peu d'utilisateurs vont être heureux avec un horodatage affiché comme 1171733878. Depuis que je suis dans le fuseau horaire de l'Est des États-Unis, je tiens à voir quelque chose comme le 12:37:58 février 17, 2007. Mais une personne à Los Angeles en Californie voudrais quelque chose comme 9:37:58 Feb 17, 2007. J'ai écrit un peu perl script pour afficher le format de temps, lors d'un nombre comme 1171733878. Voici le résultat tel qu'il apparaît à la fois dans l'Est et du Pacifique, les fuseaux horaires pour quelques soigneusement sélectionnés timestamps:
Est:
1173596399 dimanche 2007-03-11 01:59:59 Heure normale
1173596400 dimanche 2007-03-11 03:00:00 Daylight Saving Time
1173607199 dimanche 2007-03-11 05:59:59 Daylight Saving Time
1173607200 dimanche 2007-03-11 06:00:00 Daylight Saving Time
Pacifique:
1173596399 samedi 2007-03-10 22:59:59 Heure normale
1173596400 samedi 2007-03-10 23:00:00 Heure normale
1173607199 dimanche 2007-03-11 01:59:59 Heure normale
1173607200 dimanche 2007-03-11 03:00:00 Daylight Saving Time
Notez que le temps Unix intérieur ne change pas avec le début de l'heure avancée. Qu'est-ce qui se passe, c'est que d'une nouvelle règle pour savoir comment afficher l'heure de prise d'effet. Afin de convertir de temps interne à un timestamp, Unix a besoin de savoir qui le fuseau horaire à utiliser. Et il a besoin de savoir si Heure d'été est en vigueur. Il existe plusieurs sous-routines qui peuvent être appelés à formater un timestamp. Tous ces éventuellement invoquer tzset () pour déterminer le fuseau horaire et l'état de Daylight Saving. Et tzset vérifie toujours la variable d'environnement TZ à savoir ce que l'utilisateur veut. Si vous n'avez pas une variable d'environnement TZ, tzset () ira à une sorte de défaut, qui peuvent varier d'un système à l'autre. La variable d'environnement TZ est souvent fixé à quelque chose comme EST5EDT4 ce que j'utilise. Ceci explique que je suis dans un fuseau horaire HNE appelé qui est compensée par le temps universel à partir de 5 heures et au cours de Daylight Saving jour mon fuseau horaire est appelé Paris qui est compensée par Universal Time de 4 heures. Pour savoir quand Daylight Saving est en vigueur, tzset sera dans certains fichiers de données. Quel fichier (et le format du fichier est en) varie d'un système à l'autre. Les correctifs qui sont disponibles cette année pour le changement de Daylight Saving doit vraiment être un peu plus de certaines modifications à ces fichiers.

Temps universel
En plus de connaître le fuseau horaire, un système UNIX doit être capable d'utiliser l'heure universelle (qui est presque le même que le vieux Greenwich Mean Time). C'est ce que la "date-u" ne. La définition du temps universel est bien connu et n'entraîne pas de changements d'heure d'été. Le temps universel définition se construire en mai la date des routines plutôt que d'utiliser le fichier de données de tzset (). Cette mai-être vrai, même si une entrée est présente pour UTC. Mail programmes utilisent souvent UTC timestamps.
  #2 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9131
Daylight Saving Ruled ont changé et je n'ai pas de Patch .... Que faire?

Disons que mon système est encore mis en place pour l'année dernière règle. Mon système va bientôt montrer le mauvais temps. Que dois-je faire? Une chose qui est pas une très bonne idée serait de manivelle de l'horloge avant l'heure manuellement. Si je ne suis que mon système aura le mauvais temps interne. Certains services réseau tels que NFS utiliser le temps interne. Mon système serait également ne plus avoir le temps universel. NTP (Network Time Protocol) sera le mauvais fonctionnement du système, et mon horloge dérive. Même pour mon propre fuseau horaire, j'aurais timestamps 17:00 HNE comme quand j'aurais dû 17h00 EDT. Quelques semaines plus tard, la vieille règle prendra effet, et je vais maintenant besoin d'ajuster l'horloge manuellement à nouveau.

J'espère vous avoir convaincu de ne pas réinitialiser le temps de cette manière. Une meilleure option serait à la recherche de mon système de fichier de données qui définit les règles d'heure d'été pour mon fuseau horaire et l'éditer moi-même. Cela devrait être un simple changement. Mais chaque système mai avoir son propre format.

Il ne semble pas près d'être une solution universelle: l'utilisation plus complexe, le format de la variable d'environnement TZ. En fait, vous pouvez mettre le Daylight Saving règle TZ et ce comportement est prescrit par Posix. Voici un tableau des paramètres TZ que je pense être correcte pour l'année 2007.
Code:
# Posix Format
TZ="EST5EDT4,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Eastern
TZ="CST6CDT5,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Central
TZ="MST7MDT6,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Mountain
TZ="PST8PDT7,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Pacific
TZ="AST9ADT8,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Alaska
TZ="HST10"                                       # US Hawaii

# Old System V Release 3.1 and Xenix Format
TZ="EST5EDT4;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Eastern
TZ="CST6CDT5;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Central
TZ="MST7MDT6;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Mountain
TZ="PST8PDT7;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Pacific
TZ="AST9ADT8;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Alaska
TZ="HST10"                                       # US Hawaii

  #3 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9131
Considérations spéciales pour cron

cron répondre à l'évolution dans le temps
Si vous réglez l'heure du système tandis que cron tourne, cron avis et essayer de compenser. Si le temps passé en arrière, cron sera arrêtée d'emplois et d'attendre que l'horloge à l'avance où cron à lancer le dernier poste de travail. Si le temps passé avant, cron va essayer de rattraper le retard. Il cliquez si chaque minute jusqu'à ce que il a dirigé tous les emplois prévus au cours de la durée du temps ignorées. Si vous êtes tout simplement modifier l'horloge système, car il était en congé de quelques secondes, c'est parfait. Mais si le temps est une année de congé, il ne sera probablement pas une bonne chose. Pour les grandes adaptations de l'horloge, vous devez tuer et de redémarrer cron.

cron répondra à Daylight Saving Changes
Supposons que j'ai un emploi prévu pour fonctionner à 2h15 dimanche matin. Lorsque nous "avant le printemps", il n'y aura pas de 2:15. cron est à noter que nous avons "vu venir" de 60 minutes, il va ajouter 60 minutes à mon travail à faire 3h15. Elle se déroulera le travail à 3h15 ... à moins que le travail était déjà prévu pour fonctionner à la fois 2h15 et 3h15. Dans ce cas, mon travail se déroulera une fois à 3h15.

Plus tard dans l'année, nous avons "retombent". Le dimanche, il sera deux fois 2h15. Mon travail ne fonctionnera lors de la première 2h15. Si mon travail est prévue pour fonctionner à 15 minutes après chaque heure par l'utilisation explicite d'un astérisque dans le domaine de mon travail en heures se déroulera à la fois 2h15 's. Ce n'est pas vrai si je l'utilise tout un éventail ou une liste d'heures à courir. Seuls les emplois d'un astérisque pour l'heure le terrain à la fois courir 2h15 's.

cron a son propre fuseau horaire
Si je planifier mon travail de 2h15 le matin, cron sera quand il pense que le moment est 2h15. cron est étroitement liée à la "à" commande. Si je programme à l'emploi via "at" pour fonctionner à 2h15, ma variable TZ est inspecté et de l'emploi se déroulera à mon 2:15. Mais cron ne fonctionne pas de cette façon.
  #4 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9131
Leap Seconds

La définition d'un deuxième est soigneusement fixé. Chaque seconde est exactement aussi longtemps que toute autre seconde. Quand les scientifiques ont été liant à la valeur précise d'une seconde, ils correspondent aussi exactement que possible à l'année 1900. Il ya 24 * 60 * 60 \u003d 86400 secondes dans une journée. Mais la Terre a un peu ralenti, principalement en raison de la force des marées. Chaque année, il lui faut environ ,7 secondes supplémentaires. De temps en temps, nous avons une journée avec 86,401 secondes. Unix tente de faire croire que ce n'est pas le cas. Si vous ne disposez pas de NTP, puis périodiquement, vous devez manuellement modifier votre horloge et vous indemniser pour une seconde lors de votre prochain ajustement manuel.

Si vous exécutez NTP, Unix tente de faire la dernière seconde de la journée avec un dernier saut de 2 secondes. Avec de nombreuses applications, la deuxième avance de façon inappropriée dans le milieu de cette longue spéciale, deuxième et sera ajusté en arrière de quelques millisecondes plus tard.

Donc, en ignorant le potentiel désordonné deuxième longue transition, nous traitons chaque jour comme si c'était 86.400 secondes.

Par ailleurs, il a fallu près d'un siècle de la Terre à ralentir suffisamment pour ,7 besoin secondes supplémentaires chaque année. Il faudra un siècle pour ralentir suffisamment à besoin d'environ 1,4 seconde année supplémentaire. Ne pensez pas que chaque année est ,7 secondes de plus que son prédécesseur immédiat.
  #5 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9131
Mon script Perl

Voici mon Perl script que j'ai utilisé dans cet article ...
Code:
#! /usr/local/bin/perl


sub printtime($)
{
        @d=localtime $_[0];
        printf "%12d  %3s %4d-%02d-%02d %02d:%02d:%02d %s\n", $_[0],
                (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$d[6]],
                $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0],
                ("Standard Time","Daylight Saving Time")[$d[8]];
}

while (do {print "Enter val - "; chomp($val = <>)}) {
        print "val = ", $val, "\n";
        printtime $val;
        printtime $val+1;

}
print "\n";

Voilà comment je vérifie que les données de fuseau horaire est correct. Je viens de calculer à la main, le deuxième quand je m'attends à l'Heure d'été pour passer et je utiliser ce script pour voir si il ne ...
  #6 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9131
Divers Odds and Ends

Votre système d'exploitation impose des limites sur la plage de dates qu'il peut Format
Vous avez besoin de vérifier la documentation de votre système qui date, il peut supporter.

Par exemple, HP-UX 11i Version 2 a écrit:
Le minimum de date soutenu par mktime () dans les 32 bits et 64 bits de HP-UX est le Vendredi Décembre 13 20:45:52 UTC 1901. Le montant maximum soutenu par dates mktime () mardi 19 Janvier 03:14:07 UTC 2038 et Vendredi 31 Décembre 9999 à 23:59:59 UTC 32 bits de HP-UX et 64 bits de HP-UX, respectivement. Si le calendrier le temps ne peut pas être représenté, la fonction retourne la valeur (time_t) -1 et fixe errno à ERANGE. Note de la valeur (time_t) -1 correspond également à l'heure 23:59:59 le Dec 31, 1969 (en plus ou en moins de temps et de zone de l'heure avancée ajustements). Il est donc nécessaire de vérifier la valeur de retour et errno fiable pour détecter une condition d'erreur.

Solaris 10 a écrit:
Le fuseau horaire zoneinfo fichiers de données ne sont pas de transition passé Tue Jan 19 03:14:07 2038 UTC. Ainsi, pour les applications 64-bit en utilisant zoneinfo fuseaux horaires, les calculs au-delà de cette date risque de ne pas utiliser le décalage de temps standard, et peut retourner des valeurs incorrectes. Cela affecte la version 64-bit de localtime (), localtime_r (), ctime (), et ctime_r ().

Nanosecond Résolution
Je remarque que Posix est de spécifier une série de routines nanaosecond résolution. Je vois que Solaris 10 est mis en œuvre. Je n'ai aucune expérience avec eux et je l'ai ignoré à ce fil. Le clock_settime (3RT) dit la page man:
Citation:
A clock_id de CLOCK_HIGHRES représente la nonadjustable haute résolution, l'horloge du système. Pour cette horloge, la valeur retournée par clock_gettime (3RT) représente la quantité de temps (en secondes et nanosecondes) depuis quelques temps arbitraires dans le passé, elle n'est pas liée de quelque façon à l'heure de la journée, et n'est donc pas soumis à réinitialiser ou à la dérive au moyen de adjtime (2), ntp_adjtime (2), settimeofday (3C), ou clock_settime (). La source de temps de cette horloge est la même que pour gethrtime (3C).
Cela implique que la résolution nanoseconde routines ne sont pas destinés à l'heure. D'autre part, je vois maintenant ls-E a une option pour afficher le fichier fois en nanosecondes.

Si vous affichez le temps en nanosecondes, assurez-vous de garder vos yeux à proximité de l'écran. Voyage de lumière ne peut pas même un pied en une nanoseconde.

Pour en savoir plus
Assurez-vous de lire mtime, ctime, atime et pour plus d'informations sur les timestamps des fichiers.
 

Bookmarks

Tags
horloge, mtime, temps

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 11:45 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0