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