tri sur la date [ RESOLU] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 21-02-2008 à 11:12:49
source du script ?
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 ?
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 ?
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 ), 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.
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
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 |
On voit très bien que c'est 'file2' qui a été ajouté, non ?
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.
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