[Shell] Problème avec Crontab et scripts

Résolu
Jacks3006 -  
 Jacks3006 -
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
 
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
Jacks3006
 
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
 
«il agit comme une valeur booléene dans un "if"» c'est ça.
0
Jacks3006
 
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   Statut Contributeur Dernière intervention   6 431
 
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
Jacks3006
 
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   Statut Contributeur Dernière intervention   136
 
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
Jacks3006
 
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