[Shell] Problème avec Crontab et scripts

Résolu/Fermé
Jacks3006 - 30 mai 2011 à 11:53
 Jacks3006 - 30 mai 2011 à 16:52
Bonjour à tous,

Je suis en train de mettre en place un projet pour une entreprise et j'ai un léger souci avec Crontab (quoi que je suis pas sûr que ca vienne de lui), je vous explique :

Le but principal est de télécharger un fichier de configuration d'un serveur pour configurer d'autres serveurs. En gros, les étapes sont :

- Téléchargement du fichier "config_new.xml"
- Déplace le fichier dans le bon endroit de l'arbo (/root/configurateur/ pour des raisons de sécurité)
- Avec la commande "diff", vérifie entre les deux fichiers s'il y a des différences (avec "-q" en paramètre pour la commande, ensuite je "grep -c" le mot "differ" et je stocke le résultat dans une variable)
- Si ma variable vaut 1, alors je "rm config.xml" et je "mv config_new.xml config.xml", sinon je "rm config_new.xml"

Lorsque je regarde le log de mon script, je remarque qu'il ne voit jamais de changements. J'ai essayé alors de séparer en deux scripts, un lancé par Crontab qui lance le script de mise à jour, mais rien n'y fait ..

HELP je suis perdu, des idées?

Merci d'avance !

Jacks3006

A voir également:

2 réponses

Utilisateur anonyme
30 mai 2011 à 13:12
salut

plus simple, utilise
if cmp -s config_new.xml config.xml; then mv config_new.xml config.xml; else rm  config.xml; fi
en ayant d'abord vérifier que les deux fichiers existent, bien sûr.
2
Merci de vous être penchés sur mon problème (déjà) :)

Alors le truc, c'est qu'avec la commande cmp -s, je n'ai aucune sortie pour me dire si c'est différent ou pas. Il ne faudrait donc pas utiliser ce paramètre, ou alors il agit comme une valeur booléene dans un "if"? Si c'est le cas, ca me facilite grandement la tache effectivement :)
0
Utilisateur anonyme
30 mai 2011 à 13:32
«il agit comme une valeur booléene dans un "if"» c'est ça.
0
Mmmmh bizarre, si je le met directement dans le if, il me dit toujours qu'il n'y a pas de changements ( if [ 'cmp -s config.xml config_new.xml' ]) en gros il retourne zéro.

Je suis obligé de "grep" le mot "differ" dans le résultat du cmp sans le paramètre -s .. C'est bizarre.

Est ce que j'aurais fait quelque chose de faux? Sinon je continue comme je faisais, après tout c'est pas la commande qui ne jouait pas, c'est lorsque le script est lancé par Crontab que ca ne joue plus ..

Merci pour ton aide !
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
30 mai 2011 à 14:09
Salut,

Il faut examiner le code retour ($?) et comparer sa valeur, 0 = true, 1 = false.

cmp -s config.xml config_new.xml
retval=$?

if [ "${retval}" = 0 ]; then ...; else ...;fi
0
Merci ca marche nickel ! Je suis encore un peu débutant sous UNIX, je connaissais pas bien les codes retour :)

En tout cas merci à tous, je vais éditer tout ca et voir si Crontab fait moins ch*** maintenant :P
0
elpens Messages postés 815 Date d'inscription mercredi 10 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2014 136
30 mai 2011 à 12:01
Hello,

En effet, je ne pense pas que ton problème vient de "crontab", mais plutot de ta commande grep.

Personnelement j'utiliserai une commande md5 pour comparer les 2 fichiers, mais cela devait aussi aller avec grep...

Mets des "echos" dans ton scripts et afin de voir d'ou vient exactement le problème.

0
Attends, peut être que si tu vois mon script, tu comprendras mieux mon problème, vu que des echos sont déjà mis en place :

change=""
'wget -q http://mon.url/getconfig.php'
'mv getconfig.php config_new.xml'
change='diff -q config.xml config_new.xml | grep -c differ'
if [ $change = 0 ]
then
echo "Launched the 'date' => No changes" >> /var/log/listener.log"
'rm config_new.xml'
else
echo "Launched the 'date' => Changes => Launch configurator.sh" >> /var/log/listener.log"
'rm config.xml'
'mv config_new.xml config.xml'
fi

A mon avis, le script n'est pas très complexe et parle de lui même. Il était lancé par Crontab, mais j'ai fait un autre script, lancé par Crontab qui lance celui ci
0