[ RESOLU] tri sur la date

tri sur la date [ RESOLU] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 21-02-2008 à 11:09:55    

Bonjour
 
un script bash fait une synchronisation rsync tous les matins entre deux répertoires distants. La différence se fait sur l'ajout d'un fichier unique .
 
Cette synchronisaton est logguée puis envoyé par mail. Le hic, c'est que tous les fichiers du répertoire, apparaissent dans le mail.  
Je ne voudrais en fait voir que le fichier qui a été ajouté (ou modifié).
 
Quelqu'un aurait une piste ?
 
Merci


Message édité par mogruith le 21-02-2008 à 14:43:42
Reply

Marsh Posté le 21-02-2008 à 11:09:55   

Reply

Marsh Posté le 21-02-2008 à 11:12:49    

source du script ?


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 21-02-2008 à 11:22:40    

#!/bin/bash
LOCAL_LOG=/var/log/synchro.log
rm -f $LOCAL_LOG
touch $LOCAL_LOG
 
function calc_date ()
{
        date +"%Y-%m-%d %H:%M:%S :"
}
 
# Enregistrement dans la LOG locale
echo "`calc_date` DEBUT SYNCHRONISATION REP1 REP2! ($*)" >> $LOCAL_LOG
 
# Synchronisation du répertoire rep1 vers rep2
echo "`calc_date` Synchronisation du répertoire rep1 vers rep2 ! ($*)" >> $LOCAL_LOG
# La synchronisation est lancé par l'utilisateur lambda
su - lambda << EOF
./synchro_rep1rep2.sh
exit
EOF
 
# Le script est dans /root
cd
rsync -atporuvzb /home/lambda/synchro/rep /data/synchro/
 
 
./copie_1.sh
echo "`calc_date` Copie 1 ok !" >> $LOCAL_LOG
 
 
# on recopie
cd
./copie_2.sh
echo "copie 2 ok !" >> $LOCAL_LOG
echo "`calc_date` SYNCHRONISATION REP1 REP2 TERMINE ! ($*)" >> $LOCAL_LOG
 
cd
./rapport.sh > script de mail, il envoie simplement un rapport.
 
pour expliquer un peu mieux les choses :
J'ai un serveur windows qui reçoit un fichier tous les matins d'un partenaire. Un de mes serveurs linux, hébergeant une application métier a besoin de ce fichier, il va donc le chercher via rsync tous les matins sur le windows. Il en evoie aussi d'autres par la meme occasion sur un second répertoire du windows, qui se charge de le renvoyer au partenaire (c'est une boucle toute simple en fait)
Comme j'ai des problèmes de droits, je recopie en root sur le linux, le répertoire applicatif vers mon utilisateur lambda qui a le droit de faire du rsync vers le windows.  
Donc root, recopie les fichiers vers le home de lambda, qui lance la synchronisation et qui récupère tous les nouveaux fichiers du windows, et qui au cours de la meme action, envoie les fichiers générés par l'applicatif.
 
ais je été clair ? :)

Reply

Marsh Posté le 21-02-2008 à 11:51:51    

sinon pour faire plus simple, comment je loggue le fichier le plus récent dans un répertoire ?
 
:)

Reply

Marsh Posté le 21-02-2008 à 12:09:15    

mogruith a écrit :

sinon pour faire plus simple, comment je loggue le fichier le plus récent dans un répertoire ?
 
:)


Un truc très moche (pas le temps de faire mieux :spamafote:), mais qui devrait marcher :

stat -c '%Y %n' ${dir}/* | sort -nr | head -n 1 | cut -d' ' -f 2


 
Mais plutôt que de faire ce genre de choses, tu as peut-être moyen de demander à rsync quels sont les fichies qu'il a eu besoin de synchroniser... Ce serai sans doute plus simple et plus fiable.


---------------
TriScale innov
Reply

Marsh Posté le 21-02-2008 à 12:13:50    

ben le hic, c'est que je ne connais pas à l'avance le nom du fichier qui va être ajouté. Mais j'ai mis les options -u etc dans le srcipt rsync donc il ne synchronise que les nouveaux . je veux juste pouvoir lire dans un mail, que le fichier "machin" est arrivé ce matin et qu'il a été mis a jour dans le répertoire final de mon application.
 
Je vais tester ton "truc"
 
merci

Reply

Marsh Posté le 21-02-2008 à 14:03:45    

Je comprends toujours pas ce qui t'empêche de récupérer la sortie de rsync pour savoir quel fichier a été transféré :??:

~/tmp> mkdir dir1 dir2
~/tmp> touch dir1/file1 dir1/file2 dir2/file1
~/tmp> rsync -ruv dir1/ dir2/
building file list ... done
file2
 
sent 101 bytes  received 42 bytes  286.00 bytes/sec
total size is 0  speedup is 0.00


 
On voit très bien que c'est 'file2' qui a été ajouté, non ?


---------------
TriScale innov
Reply

Marsh Posté le 21-02-2008 à 14:41:53    

Effectivement cela fonctionne bien.
 
J'ai aussi essayé ca et cela me donne un résultat aussi satisfaisant.
find . -mmin -500 | xargs echo {}  >> testlog \;
 
Merci pour ton aide.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed