La Fibre

Télécom => Logiciels et systèmes d'exploitation => Linux Linux => Discussion démarrée par: vivien le 18 février 2014 à 17:54:20

Titre: Script de mise à l'heure automatique
Posté par: vivien le 18 février 2014 à 17:54:20
Pour mettre à l'heure mes serveurs, j'utilise la crontab.

Mais je me suis dit qu'il était bête de solliciter un serveur NTP juste au changement de minute et qu'il serait pertinent d'introduire un délai aléatoire pour répartir mieux la charge.

Le code sleep $[ ( $RANDOM % 58 ) + 2 ]s fonctionne trés bien dans une invite de commande, mais pas dans la crontab, pourquoi ?

Dans la crontab, il ne cherche pas a remplacer les $ par la valeur calculée !

# mise a l'heure chaque heure entre à la première minute, entre 00:02min et 00:59min
00 * * * * sleep $[ ( $RANDOM % 58 ) + 2 ]s ; /usr/sbin/ntpdate 192.168.1.1 >>/home/log/ntpdate/ntpdate.log 2>&1
Titre: Script de mise à l'heure automatique
Posté par: Marin le 18 février 2014 à 18:17:51
Le code sleep $[ ( $RANDOM % 58 ) + 2 ]s fonctionne trés bien dans une invite de commande, mais pas dans la crontab, pourquoi ?

Dans la crontab, il ne cherche pas a remplacer les $ par la valeur calculée !

Est-ce que tu es sûr que les chaînes de caractères passées à crontab à l'emplacement des commandes sont bien exécutées avec bash ?

Tu devrais plutôt mettre le code dans un .sh, ça serait plus propre et résoudrait probablement le problème.
Titre: Script de mise à l'heure automatique
Posté par: vivien le 18 février 2014 à 18:29:19
Effectivement, c'est une incompatibilité de dash (qui a l'avantage d'être plus rapide que bash, utiliser moins de mémoire et avoir un exécutable 9 fois plus léger)

dash est utilisé par défaut sous Ubuntu / Debian pour tout ce qui est scripts.

Voici mon fichier test1.sh :
#!/bin/dash
sleep $[ ( $RANDOM % 58 ) + 2 ]s ; echo test

Cela ne fonctionne pas :
$ ./test1.sh
./test1.sh: 2: ./test.sh: Syntax error: "(" unexpected


Voici mon fichier test2.sh :
#!/bin/bash
sleep $[ ( $RANDOM % 58 ) + 2 ]s ; echo test

Cela fonctionne :
$ ./test2.sh
test
Titre: Script de mise à l'heure automatique
Posté par: willemijns le 20 février 2014 à 22:33:36
Mais je me suis dit qu'il était bête de solliciter un serveur NTP juste au changement de minute et qu'il serait pertinent d'introduire un délai aléatoire pour répartir mieux la charge.

Hello,

pourquoi mettre un temps variable ? tu peux croner toutes les 3 heures au lieu de la minute non ?
Titre: Script de mise à l'heure automatique
Posté par: vivien le 20 février 2014 à 22:43:02
La je mets à jour toutes les heures (c'est vrai que c'est peut être un peu trop fréquent)
Titre: Script de mise à l'heure automatique
Posté par: willemijns le 20 février 2014 à 23:02:42
La je mets à jour toutes les heures (c'est vrai que c'est peut être un peu trop fréquent)

apres est-ce qu'une requete NTP surement aussi grosse que 3 ou 4 requetes DNS le vent dans le dos va faire plomber un serveur ? j'en doute fort....
Titre: Script de mise à l'heure automatique
Posté par: butler_fr le 21 février 2014 à 02:16:47
pourquoi ne pas utiliser ntpd?
c'est fait pour ça il me semble!
Titre: Script de mise à l'heure automatique
Posté par: willemijns le 21 février 2014 à 08:40:37
c'est pour eviter d'avoir un daemon a gerer en plus je suppose....
Titre: Script de mise à l'heure automatique
Posté par: vivien le 21 février 2014 à 08:46:45
ntpd, c'est pour mettre en place un serveur ntp (afin que d'autres machines se mettent à l'heure)

Il y a le fichier /etc/default/ntpdate mais je n'ai pas compris quand était fait la mise à jour et où étaient les logs (vérifier si le serveur est toujours ok)

La crontab offre un autre avantage : contrôler l'heure de mise à jour. Sur des machines qui font des tests (et je ne fais aucun test la première minute de chaque heure). Le fait d'avoir un gros trafic qui sature le lien et entraîne de la gigue impacte la fiabilité de la mise à jour.
Titre: Script de mise à l'heure automatique
Posté par: butler_fr le 21 février 2014 à 09:47:12
Pour moi ntpd c'est avant tout un client de mise a jour en continue de l'horloge
je ne sais si il fait aussi serveur (ce doit être paramétrable)
si tu introduis une notion aléatoire dans la mise a jour de ntpdate ça revient au même que d'utiliser ntpd non?
sauf que comme avantage ntpd calcule la dérive moyenne de ton horloge (drift) et la corrige a l' avance! (ou lorsque le réseau est hs!)

par contre quel besoin d'avoir toujours un serveur a l'heure à la ms près?
Titre: Script de mise à l'heure automatique
Posté par: vivien le 21 février 2014 à 09:50:12
Pour certains usages (capture wireshark coté client et coté serveur) c'est très important d'avoir une heure fiable à la ms prés. Sinon, c'est vrai que tant qeu cela ne décale pas trop ce n'est pas grave.

J'introduit une part de aléatoire limite (55 secondes d'aléatoire) sur un espace temps où je sais que je n'utilise pas la connexion.
Titre: Script de mise à l'heure automatique
Posté par: butler_fr le 21 février 2014 à 10:16:25
ok  effectivement avec wireshark
:)