Bonjour,
Explication du contexte…
J'ai des switchs CISCO qui envoient leur configuration sur un serveur tftp automatiquement a chaque modification de celle ci sur l'equipement.
L'objectif est de garder seulement 5 sauvegardes, soit les 5 plus recentes.
La forme du nom des fichiers est:
switch01-421--Mar--1-1993-01-03-34.974-GMT-0
Où "switch01" correspond au nom de l'equipement; "421" represente l'usine où est l'equipement (qui pourrait etre supprimé); ensuite la date, et tout a la fin un numero d'increment (le numero d'increment repart a "0" a chaque reboot de l'equipement.
Sur le serveur tftp, j'ai un repertoire par usine… soit une arboressence:
serveur-tftp/421
/533
/679
Note importante, il peut y avoir 50 sauvegardes du meme equipement en une journée comme une seule par an…
L'idée serait de programmer un tache cron tous les jours, qu'elle scanne le repertoire "serveur-tftp" (recursivement) et que dans chaque repertoire elle garde seulement les 5 dernieres sauvagerdes de chaque equipement…
alors ca fait un moment que j'ait pas fait de bash ou autre script… donc je viens vers vous pour savoir comment faire cette fameuse boucle, et le decoupage de nom de fichiers (ou utilisation de la date de creation de fichier) pour pouvoir selectionner les fichiers a garder ou effacer…
PS : j'espere etre dans la bonne categorie pour poster…
Merci
# Quelques billes
Posté par lay . Évalué à -2. Dernière modification le 01 février 2013 à 10:51.
Bonjour,
Pour faire ton script il te faut déjà avoir accès au serveur FTP pour récupérer l'information et effectuer les suppressions.
De ce coté je te conseille lftp qui est un client ftp en console avec pleins de possibilités.
Exemple:
echo "find / > list_files" |lftp user:pass@ftp_serveur
Cette commande va te lister les fichier du ftp dans le fichier list_files en local, ainsi tu pourras dans ton script sélectionner les fichiers à supprimer et envoyer les commandes de suppression de la même manière.
voir le man de lftp pour lister les possibilités.
# Proposition
Posté par BlueWhisper . Évalué à 2. Dernière modification le 01 février 2013 à 14:30.
C'est vraiment brutal (non testé… remplace le premier echo par rm une fois que tu es sûr ;-)):
# logrotate est ton ami
Posté par NeoX . Évalué à 3.
tout est dans le titre
logrotate fait ca tres bien,
il le fait deja pour les logs du systeme
il peut faire la rotation/suppression selon une date, selon une taille
tu peux preciser combien tu en gardes…
# tout ca est intéressent :)
Posté par shake.norris . Évalué à 1. Dernière modification le 01 février 2013 à 14:30.
Merci pour les réponses…
Lay, en faite mon script tournera sur la même machine où est le serveur tftp…
du coup un "ls" fera l'affaire pour ca… mais il faudra plus creuser ;)
Bluewhisper,
alors j'ai compris certain bout mais pas tout :P
le "find" cherche les fichiers de type fichier, ensuite le "cut" prend le début du nom avec un delimiteur "-", le "sort" trie le résultat, et le "uniq" permet de supprimer les doublons de lignes… le "ls -1t" permet de faire un listing des fichiers en colonne et trié par date… le "tail -n +6" alors je comprends pas le "+6" mois je connais juste avec "6" sans le "+" pour afficher seulement les 6 derniers lignes…
mais il y a de endroits ou je comprends pas grand chose…
le "for sw in" et le "$sw*"…? c'est le paramètre de boucle mais je comprends pas trop…
neox,
je connaissais logrotate (jamais mis en place) mais pour gérer le log justement ^
j'ai lu un peu de doc dessus mais la aussi j'ai des interrogations…
Car dans chaque répertoire qui correspond a une usine, il va y avoir toutes les sauvegardes, comment logrotate fait la distinction entre les différents fichiers?
Mon problème est que les noms de fichiers sont différents pour chaque switch et en plus chaque sauvegarde aura un nom différent a cause de l'inclusion de la date dans le nom (et je peux pas le changer…). Il ne doit pas jouer que sur la date car certain switchs seront modifier souvent et d'autre presque jamais…
Merciiiii
[^] # Re: tout ca est intéressent :)
Posté par NeoX . Évalué à 1. Dernière modification le 01 février 2013 à 14:39.
logratote gere tres bien les noms avec caracteres generiques
ex pour apache
on voit clairement qu'il doit traiter les fichiers *.log du dossier /var/log/apache2
il fera le traitement toutes les semaines avec l'option weekly
il en gardera 52 grace à l'option rotate 52
et il execute meme des commandes avant/apres la rotation (prerotate et postrotate)
de memoire il se base sur la date du fichier pour calculer ceux qu'il doit virer et pas sur leur nom.
mais avec un rotate de 10, il ne gardera que les 10 derniers fichiers, et s'ils sont creer 1 fois par an, ben il gardera 10ans
il faut evidemment tester, mais j'ai souvenir d'avoir configuré ca pour des backups de sites web en .tgz
[^] # Re: tout ca est intéressent :)
Posté par shake.norris . Évalué à -1.
Hummmm pas mal mais…
comme j'ai expliqué le switch envois automatiquement le backup quand sa configuration est modifiée (a chaque "write memory" si tu connais CISCO), et tu me dis qu'il se base sur une date… mais dans une même usine il se peu que certain switchs soient modifiés 100 fois par an et d'autre seulement 5… et biensur pas forcement au mêmes dates dans ce cas ca va poser problème non?
[^] # Re: tout ca est intéressent :)
Posté par NeoX . Évalué à 2.
dans mon var/log/apache2
j'ai des fichiers access.log, des fichiers error.log
et avec la config donnée plus haut (qui dit de traiter /var/log/apache2/*.log), il fait bien la rotation de
access.log.5.gz => suppression
access.log.4.gz => access.log.5.gz
access.log.3.gz => access.log.4.gz
access.log.2.gz => access.log.3.gz
access.log.1 => access.log.2.gz
access.log => access.log.1
la meme chose pour error.log
donc je ne vois pas pourquoi il ne pourrait pas le faire pour
/var/log/usineA/*.bckp
avec switchA-20120131.bkcp, switchB-20111231.bckp
sauf peut-etre qu'il va falloir l'aider au debut
en renommant le premier fichier switchA.bckp
celui d'avant en switchA.bckp.1
etc
ainsi il garde la date de la creation dans les infos du fichier, sur le systeme de fichier.
bon, j'avoue que je ne sais pas comment il peut se comporter si tu le fais tourner plus regulierement que daily
car à ce que tu dis, on pourrait avoir 40 fichiers dans une journée
puis rien pendant 6 mois
mais tu auras un probleme similaire avec ton script de purge,
que tu feras tourner toutes les X jours
et qui devra purger tout ce qui est plus vieux de Y jours
ex : avec Y = 6 mois (180jours)
pour un switch il ne va te garder que la config de fin janvier 2013 car la precedente (fin janvier 2012) date de plus de 6 mois
mais il va te garder les 25 sauvegardes d'un autre switch qui a été modifié 25 fois entre aout 2012 et janvier 2013.
alors que logrotate à l'inverse, tu lui dis de ne garder que les 25 dernieres,
il se fichera de savoir de quand date le fichier, il gardera 25 fichiers : xxxx.bckp et xxxx.bkcp.1 à xxxx.bckp.24
si un switch a été modifié 30 fois (1 par jour) en janvier, il ne gardera que les 25 dernieres (les 25 derniers jours)
mais si un switch a été modifié 5 fois par ans pendant 5 ans, il gardera bien les 25 dernieres configs (soit 5 ans)
Bref, il y a des outils pour faire ce que tu demandes, il faut juste prendre le temps de tester
(et de toutes facons il aurait aussi fallu tester ton script)
donc tu prends quelques fichiers que tu 'cp -p' (pour conserver les infos de date en autre) dans un dossier de test
tu configure logrotate sur ce dossier de test
avec une rotation daily (on peut peut-etre descendre à hourly pour un changement toute les heures)
et tu verras ce qu'il fait avec tes fichiers dans test
[^] # Re: tout ca est intéressent :)
Posté par BlueWhisper . Évalué à 1.
Cela dit, je me souviens bien des cisco, lorsque l'on sauvegarde avec
archive path
, il rajoute tout seul la date… ça me semble difficile à gérer avec logrotate…[^] # Re: tout ca est intéressent :)
Posté par BlueWhisper . Évalué à 2.
Alors tu as juste pour la compréhension. Le
tail -n +x
affiche à partir de la x-ième ligne (cf. page de man):Donc au final le
for
va parcourir toute les préfixes ($sw
) du type421/switch01-421
.On va garder tous les résultats à partir du 6ème de (par ex)
ls -1t 421/switch01-421*
. (je viens de remarquer qu'il faudrait plutôt mettre$sw-*
plutôt, ça évite le problème s'il y a un switch 4210 par exemple).Pour tous ceux qui suggèrent
logrotate
: je veux bien qu'on arrive à faire quelque chose de ce genre, mais ce serait possible d'avoir une réponse concrète (fonctionnant pour la spécification du problème)? C'est bien facile de dire "on y arrive".# rancid ?
Posté par nono14 (site web personnel) . Évalué à 2.
http://www.debian-administration.org/article/429/Network_Administration__Installation_of_Tacacs_Rancid_Cvsweb
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
# Hummmmm :)
Posté par shake.norris . Évalué à 0.
Salut, désolé de répondre si tard mais j’étais en weekend ;)
vien dieu! vous m'avez séché… y a des beaux scripts et il va falloir que je comprenne tout ca maintenant…
Alors pour info la structure est comme ca :
/tftpboot/save-sw-ur / CM420
US380
US240
US680
US210
CM156
CM890
Par exemple "CM420" est une usine, "US210" une autre… le nombre de répertoires est bien défini et ne bougera pas (environ 10).
Finalement la structure du nom de fichier sera plutôt celle ci dessous désolé…
dans chacun de ces répertoires il y aura cela comme fichiers:
STACK1-CM420-Feb--4-2013-10-24-11-GMT-0
STACK1-CM420-Feb-10-2013-10-24-11-GMT-1
STACK2-CM420-Feb--4-2013-11-24-13-GMT-0
STACK2-CM420-Feb--4-2013-10-24-14-GMT-2
STACK2-CM420-Feb-15-2013-10-24-16-GMT-3
exemple : STACK1-CM420-Feb--4-2013-10-24-10-GMT-0
Où "STACK1-CM420" est le nom de l’équipement, donc ça ira de "STACK1-CM420" a "STACK6-CM420" par exemple;
"Feb--4-2013-10-24-10-GMT" c'est la date de création du fichier archive, soit ici le 4 février 2013 a 10h24 et 11 seconde, GMT c'est le fuseau horaire…
ensuite il y a un chiffre, c'est un incrément sur lequel on ne peut pas se fier (remise a zero si reboot du switch par exemple)
Bon, je vais essayer de comprendre vos scripts et d'en adapter un pour mon cas…
Merci de m'avoir aidé, le sujet n'est pas clos… je mettrai résolu quand ca sera ok de mon coté ;)
# .
Posté par shake.norris . Évalué à -2. Dernière modification le 04 février 2013 à 13:43.
.
# oups...
Posté par shake.norris . Évalué à -1.
En fait j'ai poster mon PBM sur plusieurs forum et ce commentaire devais etre posté sur un autre forum notamment devoloppez.net… je tiens au jus quand j'ai la solution :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.