7
votes

Comment détecter le changement de temps système sous Linux?

Y a-t-il un moyen de vous être averti lorsqu'il y a une mise à jour de l'heure du système à partir d'un serveur horaire ou d'un changement de DST? Je suis après une API / appel système ou équivalent.

Cela fait partie de mes efforts pour optimiser la génération d'une valeur pour quelque chose de similaire à SQL maintenant () à une granularité des heures, sans utiliser SQL.


3 commentaires

Pourquoi n'utilisez-vous pas simplement des appels système pour obtenir l'heure locale lorsque vous en avez besoin?


@Romain: Trop cher pour ma demande.


Voir aussi Stackoverflow.com/questions/10496531/...


3 Réponses :


1
votes

clock_gettime sur les systèmes Linux les plus récents est incroyablement rapide et généralement assez précis; Vous pouvez trouver la précision en utilisant clock_Gettres . Mais pour les horodatées de niveau d'heure, GetTimeOdday pourrait être plus pratique car il peut faire le réglage du fuseau horaire pour vous.

Appelez simplement l'appel système approprié et faites la division en heures à chaque fois que vous avez besoin d'un horodatage; Tous les autres ajustements de temps de NTP ou tout ce qui aura déjà été fait pour vous.


0 commentaires

4
votes

Je ne sais pas s'il y a un moyen d'être informé d'un changement de temps système, mais

  • Le temps système est stocké en tant que UTC, il n'ya donc jamais de changement en raison de la commande DST à notifier.

  • Si ma mémoire est correcte, NTP Daamon ajuste généralement l'horloge en modifiant sa vitesse, sans changement à être notifié.

    Donc, le seul moment où vous seriez averti, c'est après une manipulation rare.


0 commentaires

7
votes

Vous pouvez utiliser Timerfd_create (2) pour créer un Minuterie, puis marquez-la avec l'option TFD_TIMER_CANCEL_ON_TIMER_CANCEL_ON_TIMER_CANCEL_ON_TIMER_CANCEL_PRES. Définissez-le pour un temps invraisemblable à l'avenir, puis bloquez-le (avec sondage / sélection, etc.) - Si l'heure du système change alors, la minuterie sera annulée, que vous pouvez détecter.

(Ceci est Comment SystemD fait-il )

par exemple: xxx


2 commentaires

Est-ce que cela déclenche réellement avec un changement de DST?


@HOWARDHINNNANT AIME QUEL AVOYÉS DITES À SA RÉPONSE, DST change (au moins dans mon cas) s'est avéré moins significatif. Si je comprends bien, si vous utilisez des informations sur le fuseau horaire uniquement pour la présentation et effectuez toutes vos manipulations en UTC, le changement de DST devrait être hors de propos.