OVH Community, votre nouvel espace communautaire.

[HOW-TO] Delete backup trop vieux


jicao
07/09/2012, 05h22
Voila j'ai modifié le script et ajouté quelques modifications au HOW-TO.
Merci starouille pour la suggestion.

jicao
06/09/2012, 17h04
J'ai un peu fouillé dans les fichiers du module webmin et voila ce que j'ai pu y trouver :
Code:
# Run the pre-backup command, if any
my $err;
my $premsg = "";
if ($backup->{'pre'} =~ /\S/) {
	my $preout = &backquote_command("($backup->{'pre'}) 2>&1 {'pre'})."\n".
		  $preout."\n";
	if ($?) {
		$err = $text{'email_prefailed'};
		}
	}

# Do it
my @mods = split(/\s+/, $backup->{'mods'});
my $size;
if (!$err) {
	$err = &execute_backup(\@mods, $backup->{'dest'}, \$size, undef,
			       $backup->{'configfile'}, $backup->{'nofiles'},
			       [ split(/\t+/, $backup->{'others'}) ]);
	}

# Run the post-backup command, if any
my $postmsg = "";
if (!$err && $backup->{'post'} =~ /\S/) {
	my $postout = &backquote_command("($backup->{'post'}) 2>&1 {'post'})."\n".
		  $postout."\n";
	}
Il me semble qu'il exécute la commande uniquement si il n'y a pas eu d'erreur ET que le backup a bien eu lieu non ?

jicao
06/09/2012, 16h33
C'est pas faux, dans mon cas, je pourrais l'intégré au module de backup de webmin dans la commande a lancer après le backup mais je ne sais pas si cette commande est lancée même si le backup n'a pas eu lieu :x
(bien sur il faudrait modifié le script pour chercher seulement si CE backup est trop vieux et pas tous mais ça semble assez simple )

Voila ce que l'aide du module dit :
Command to run after backup

Any shell command that you enter into this field will be run as root just after the backup is finished, either manually or on schedule. Output from the command will be included in the dump report.

starouille
06/09/2012, 09h45
Je vois que tu as réussi ton script. Le choix du perl est discutable, mais bon, tant que le résultat attendu est là.

Le soucis, c'est qu'il faudrait que tu l'intègre à ton script de sauvegarde , et non l'ajouter en cron directement.

Si ta sauvegarde est OK
-> Tu lance le script de purge

Si ta sauvegarde est KO
-> Tu ne lance pas le script de purge et bien entendu tu es averti du problème (outil de supervision ou mail).

Là, ce n'est pas très bien joué , car dans tous les cas (même si backup KO), la purge va s'effectuer.

jicao
04/09/2012, 21h55
Bonjour/Bonsoir,

Petit tuto au passage car je recherchais un script me permettant de supprimer mes backups trop vieux sur le Backup FTP OVH automatiquement.
(Merci cassiopee)
Sujet tiré de Backup facile sur la release2 Gentoo.

Créer un fichier "delete_old_backup.pl" (ceci est un exemple, vous pouvez choisir le nom de votre fichier) :
Code:
 # nano delete_old_backup.pl
Coller y ce code :
Code:
#!/usr/bin/perl

use strict;
use Net::FTP;

my $host = "host"; # ip du serveur ftp
my $user = "user"; # user ftp
my $passwd = "pass"; # mot de passe du ftp
my $dir = "/"; # dossier des fichiers a verifier
my $day = 1; 					# nombre de jours souhaités
#my $interval = 3600*24*$day; 
my $passive = 1; 
my $DEBUG = 1;

my $ftp = Net::FTP->new($host,
 Debug => $DEBUG,
 Passive => $passive)
 or die "Can't open $host\n";

$ftp->login($user, $passwd) or die "Can't log in as $user\n";

$ftp->cwd($dir) or die "Can't chdir to $dir\n";
my @files = $ftp->ls("*$ARGV[0]*");

foreach my $file (@files) 
{
 if ($file != "." || $file != ".." || $file != ".banner" || $file != ".ftpquota")
 {
 my $file_mdtm = $ftp->mdtm($file) or die "Can't find $file in $dir\n";

 if (time - $file_mdtm >= $interval) 
 {
     print "File $file is older than $interval secs: deleted\n";
     $ftp->delete($file) unless $DEBUG;
 }
 }
}
Une fois sauvé à l'emplacement de votre choix, rendez le script exécutable :
Code:
 # chmod +x delete_old_backup.pl
J'ai laissé "DEBUG = 1" pour pouvoir lancer un test.
Il ne supprimera rien, mais affichera le résultat des fichiers trop vieux (comme ceci) :
Code:
 # ./delete_old_backup.pl file1
("file1" est un exemple)
Code:
...
Net::FTP=GLOB(0x8f5ef0)>>> MDTM 2012_09_04_file1_backup.tar
Net::FTP=GLOB(0x8f5ef0)<<< 213 20120904081624
File 2012_09_04_file1_backup.tar is older than 18000 secs: deleted
...
Une fois que tout est OK, il ne vous reste plus qu'a passer
Code:
my $DEBUG = 1;
à
Code:
my $DEBUG = 0;
Ensuite il vous faudra (3 possibilités) :
1- Ajouté une ligne a votre script de backup du type
Code:
if(backup = ok) exec(/chemin/vers/votre/script/./delete_old_backup.pl NOM_DU_BACKUP)
2- Si vous utilisez (comme moi) le module de backup de webmin, entrez
Code:
/chemin/vers/votre/script/./delete_old_backup.pl NOM_DU_BACKUP
dans le champs "Command to run after backup" (section "Backup options").

3- créer une tâche CRON pour lancer ce script tous les "X" temps (après vos backups par exemple).
Code:
@monthly /chemin/vers/votre/script/./delete_old_backup.pl NOM_DU_BACKUP
PS :
- "/chemin/vers/votre/script/" est bien évidemment à changer en fonction de la ou vous avez enregistré "delete_old_backup.pl".
- "./delete_old_backup.pl NOM_DU_BACKUP" l'argument "NOM_DU_BACKUP" est aussi à changer en fonction du nom de votre backup.

ATTENTION :
Si vous avez (par exemple), vos fichiers de backup nommés :
- backup_site1_files.tar
- backup_site1_mysql.tar
Et que vous lancez :
Code:
./delete_old_backup.pl site1
Le script supprimera les deux fichiers.
Par contre,
Code:
./delete_old_backup.pl site1_files
ne supprimera que "backup_site1_files.tar".
Vous n'êtes donc pas obligé de mettre :
Code:
./delete_old_backup.pl backup_site1_files.tar
l'argument n'est pas sensible à la case.


NB :
Testé sur release 2 OVH (gentoo).

Merci.