Gérer le temps sous linux

Dans le cadre de mes expérimentations je me suis rendu compte de l'importance d'être à l'heure que ce soit pour un client ou pour un serveur, que ce soit pour la lecture des logs ou pour le bon fonctionnement de services. Je vous propose avec cet article de découvrir comment utiliser les outils de temps sous linux.

Dans un premier temps il est important de bien différencier 2 sortes de temps : l'horloge de notre carte mère et l'horloge du système d'exploitation, sous linux 2 commandes permettent de travailler dessus :

- La commande date : qui règle l'heure de l'OS

- La commande hwdate qui règle l'heure de la carte mère (CMOS)

Règler l'heure à la main

Sous linux comme sous windows on peut venir régler l'heure à la main :

[root@tuxsrv ~]# date
Sat Feb 17 11:59:36 CET 2007

Avec l'option -s on peut venir régler l'heure :

[root@tuxsrv ~]# date -s 12:00:01
Sat Feb 17 12:00:01 CET 2007

On peut également régler la date : -s JJ/MM/AAAA

Pour syncroniser l'heure de l'os avec celle du système on utilise :

hwclock avec l'option --systohc.

C'est bien jolie de le faire à la main (pour régler grossierement) mais si l'on a un réseau à notre disposition un protocole bien pratique existe
il sagit de NTP comme Network Time Protocol.

Configuration automatique avec un serveur de temps

Pour être sur d'être toujours à l'heure on peut maintenant utiliser un programme beaucoup
plus puissant : NTP il peut être utilisé comme client et comme serveur :

- Demander l'heure à un serveur de temps : pour cela on utilise la commande ntpdate : (l'option -q permet la consultation )

[root@tuxsrv ~]# ntpdate -dbs 0.fr.pool.ntp.org
addto_syslog: ntpdate 4.2.0a@1.1190-r Sun Aug 13 01:49:13 CDT 2006 (1)
Looking for host 0.fr.pool.ntp.org and service ntp
host found : srnf0501.asplenium.net
transmit(193.45.254.143)
receive(193.45.254.143)
transmit(193.45.254.143)
receive(193.45.254.143)
transmit(193.45.254.143)
receive(193.45.254.143)
transmit(193.45.254.143)
receive(193.45.254.143)
transmit(193.45.254.143)
server 193.45.254.143, port 123
stratum 3, precision -17, leap 00, trust 000
refid [193.45.254.143], delay 0.04262, dispersion 0.02621
transmitted 4, in filter 4
reference time: c9817233.fd036438 Sat, Feb 17 2007 13:23:15.988
originate timestamp: c98172c7.56a4a8c1 Sat, Feb 17 2007 13:25:43.338
transmit timestamp: c9817248.95380453 Sat, Feb 17 2007 13:23:36.582
filter delay: 0.04262 0.08148 0.08179 0.06360
0.00000 0.00000 0.00000 0.00000
filter offset: 126.7030 126.7288 126.7275 126.7365
0.000000 0.000000 0.000000 0.000000
delay 0.04262, dispersion 0.02621
offset 126.703052
addto_syslog: step time server 193.45.254.143 offset 126.703052 sec
[root@tuxsrv ~]#

Configuration d'un serveur

Voila la configuration que j'utilise ici sur mon serveur :

[root@tuxsrv ~]# cat /etc/ntp.conf

logfile /var/log/ntp.log
restrict 127.0.0.1
restrict 192.168.0.135 mask 255.255.255.0
disable auth
server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 127.127.1.0
fudge 127.127.1.0 stratum 1
driftfile /var/lib/ntp/drift

Depuis un client on peut contrôler notre serveur :

[root@srv2 etc]# ntpdc -c listpeers 192.168.0.156
client LOCAL(0)
client roxane.home-dn.net
client eth0-castralrock.par.goretsoft.net
client chihiro.bleu-pastel.org

 

Configuration d'un client linux

Pour configurer un client linux NTP utilise un fichier se trouvant dans /etc/ntp.conf

Voila le contenu ici (sachant que mon serveur de temps est srv3 )

[root@srv2 ~]# vi /etc/ntp.conf
logfile /var/log/ntp
driftfile /var/lib/ntp/drift
server srv3

Une fois configuré on lance le service :

service ntpd start


Pour contrôler que tout se passe bien on utilise l'utitaire ntpq

L'option pe ou peer : permet de voir quels sont les serveurs disponible :

Une fois que ntp a choisi son serveur de temps sur lesquel il va se syncroniser une étoile est ajouté dans la première collone en face du nom.

[root@srv2 ~]# ntpq
ntpq> pe
remote refid st t when poll reach delay offset jitter
==============================================================================
srv3 LOCAL(0) 11 u 26 64 7 6.186 -34768. 45895.7

ntpq>

En manuel, on peut également faire ceci :

Sur le client :

[root@srv2 etc]# /usr/sbin/ntpdate -su 192.168.0.156;/sbin/hwclock --systohc
[root@srv2 etc]# clock
Sat 17 Feb 2007 01:50:03 PM CET -0.909851 seconds
[root@srv2 etc]#

Puis sur le serveur si l'on affiche l'heure :

[root@tuxsrv ~]# clock
Sat 17 Feb 2007 01:50:15 PM CET -0.643240 seconds

On constate que ca marche également, on trouve sur beaucoup de sites internet l'utilisation de CRON (planificateur de tâche)
pour venir se mettre à jour toutes les 6h par exemple .. imaginez pour 10000 machines ce qui pourrait se passer ....

Mais pour une seule machine cette technique fonctionne très bien :

Dans le fichier crontab (/etc/) :


SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
0-59/5 * * * * /etc/ntp.sh

Dans notre fichier ntp.sh :

#!/bin/sh
/usr/sbin/ntpdate -su srv3;/sbin/hwclock --systohc

 

 

Annexe

Sites internet :

Pour trouver un serveur de temps français :

http://www.pool.ntp.org/zone/fr

 

Documentations :

http://www.eecis.udel.edu/~mills/ntp/html/notes.html

http://funix.chez-alice.fr/informatique/linux/ntp.htm


http://chl.be/glmf/www.linuxmag-france.org/old/lm4/ntp.html


http://ernest.tuxicity.net/index.php?choix=Reseau&tuto=ntp

Cron :

http://www.ac-creteil.fr/reseaux/systemes/linux/cron.html

Le format de CRON est le suivant :
[minute] [heure][jour][mois][jour de la semaine][commande]

Ainsi pour lancer un script le 10 janvier à 13h :

0 13 10 1 * /tmp/monscript.sh

Pour lancer un script toutes les 5 mins :

*/5 * * * * /tmp/monscript.sh

 

 

© Bastien Barbe 2008