J'ai une boîte (physique) en cours d'exécution Ubuntu dépouillé; de time en time (6 fois en 3 mois), l'horloge recule d'exactement 300 secondes (+ – 0,01 secondes, toujours exactement 300 secondes). Cela arrive d'une minute à l'autre (j'ai une machine externe qui l'interroge une fois par minute).
La boîte est en cours d'exécution 2.6.26-generic (kernel compilé personnalisé), Ubuntu 9.04 (je sais, j'essaie de le mettre à jour, mais il est semi-embedded). Il n'y a rien dans les journaux qui indique ce qui est arrivé, et j'ai un grand choix de servers ntp pool.ntp.org, qui corrigent le problème après un certain time.
Est-ce que quelqu'un sait ce qui pourrait causer cela?
Supplémentaire 1:
J'ai aussi un certain nombre d'autres boites qui courent le même kernel (binary identique), et des variantes mineures du même logiciel, qui n'ont pas ce problème. J'ai aussi échangé le matériel.
2 supplémentaires (résumé de mes commentaires individuels):
Cela ressemble à une horloge en time réel (RTC) défaillante. S'il s'agit d'un matériel de rechange, vous pouvez confirmer le problème en exécutant un autre operating system, par exemple démarrer un CD Linux en time réel ou amorcer PXE, et voir si vous pouvez répliquer l'échec. Si le décalage horaire exact se produit sur un autre operating system, vous avez confirmé que le problème est une défaillance matérielle.
En supposant que c'est le RTC, vous pouvez essayer les solutions suivantes dans l'ordre de gravité.
Vous pouvez exécuter un script sur la boîte qui garde la trace des process en cours et en même time surveille l'horloge. Si l'horloge saute soudainement, elle enregistre la list des process actifs à ce moment-là. Peut-être que cela donne un indice qui process change l'horloge.
Bien sûr, cela suppose que vous avez un problème de logiciel. Vous ne findez rien de cette façon si votre matériel échoue.
/bin/bash oldTime=$(date +%s) oldPsOutput=$(ps faux) while sleep 1 do currentTime=$(date +%s) currentPsOutput=$(ps faux) if [ "$currentTime" -lt "$oldTime" ] # clock change detected? then echo '=========' echo "$currentTime < $oldTime" echo "$oldPsOutput" echo ':::::::::' echo "$currentPsOutput" fi >> /tmp/clockChangeDetector.log oldPsOutput=$currentPsOutput oldTime=$currentTime done
La réponse de Michael Yasumoto semble couvrir toutes les bases – je suis d'accord sur le fait que vous regardez probablement du matériel ennuyeux – mais voici une idée pratique: utilisez une machine fiable avec une très bonne connectivité interne qui a une poignée de cycles pour faire fonctionner NTP, puis exécutez « ce qu'il faut » pour que le client NTP s'exécute sur le boîtier PBX embedded, et ce, le plus souvent possible (par exemple, toutes les 30 secondes) pour ce server NTP local.
Ensuite, lorsque la boîte est finalement mise à jour, mettez-la de côté et déterminez ce qui ne va pas avec At Some Point (TM). : P