View previous topic :: View next topic |
Author |
Message |
geforce l33t
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Sun Sep 11, 2005 5:58 pm Post subject: [BACKUP] Par FTP ... [Résolu] |
|
|
Bonjour..
Je cherche un script simple ( a moins de m'en faire un ) pour faires de backups par FTP, ..
Je veux compresser le dossier /pub, en preservant les permissions, chown, etc et l'envoyer par FTP dans /backups (sur mon FTP).. avec le format de fichier 2005-08-29.tar.gz ou quelque chose du genre...
C'est sur que j'aimerais encore mieux m'en faire un...
en gros ca serait:
Code: |
#!/bin/bash
# les variables
BACKUPER="/pub"
SRVFTP="192.168.2.199"
USERNAME="username"
PASSWORD="password
DIRECTORYFTP="/backups"
TODAY=$(date)
tar --preservechown --preservepermissions /pub /tmp/$TODAY.tar.gz
ftp $SRVFTP $USERNAME:$PASSWORD $DIRECOTRYFTP < /tmp/$TODAY.tar.gz
rm /tmp/$TODAY.tar.gz
|
Ya cependant quelques problemes: Si je manque d'espace disque pour compresser.... Y a t'il un moyen de compresser en meme temps que l'upload ?
C'est pourquoi je vous demandais vos opinions et experiences personnelles...
Merci
Phil _________________ http://tilde.club/~geforce/
Last edited by geforce on Mon Sep 12, 2005 2:50 am; edited 1 time in total |
|
Back to top |
|
|
Ey l33t
Joined: 07 Apr 2005 Posts: 863 Location: Paris
|
Posted: Sun Sep 11, 2005 6:39 pm Post subject: Re: [BACKUP] Par FTP ... |
|
|
A priori c'est faisable en perl avec quelque chose comme ça :
Code: | #!/usr/bin/perl
use Net::FTP;
$ftp = Net::FTP->new("ey",Debug=>0) or die "Cannot connect to server";
$ftp->login("anonymous",'password@nowhere.com') or die "Cannot login";
$ftp->cwd("/backups") or die "Cannot change directory";
$connection = $ftp->stor("2005-08-29.tar.gz");
while ( $len = read STDIN , $buffer, 1024, 0 )
{
$connection->write($buffer,$len);
}
$connection->close();
$ftp->quit;
|
ensuite tu peux remplacer le 2005-08-29 par un $ARGV[0] histoire d'appeler ce script depuis ton script bash en lui donnant en argument la date et en lui pipant le tar | gzip dans son stdin. |
|
Back to top |
|
|
Ey l33t
Joined: 07 Apr 2005 Posts: 863 Location: Paris
|
Posted: Sun Sep 11, 2005 6:45 pm Post subject: Re: [BACKUP] Par FTP ... |
|
|
Donc en résumant les choses proprement :
Fichier ftp.pl Code: | #!/usr/bin/perl
use Net::FTP;
$ftp = Net::FTP->new("ey",Debug=>0) or die "Cannot connect to server";
$ftp->login("anonymous",'password@nowhere.com') or die "Cannot login";
$ftp->cwd("/backups") or die "Cannot change directory";
$connection = $ftp->stor($ARGV[0].".tar.gz");
while ( $len = read STDIN , $buffer, 1024, 0 )
{
$connection->write($buffer,$len);
}
$connection->close();
$ftp->quit; |
puis ensuite tu l'appeles avec Code: | tar --preservechown --preservepermissions répertoire | gzip - | perl ftp.pl $TODAY |
|
|
Back to top |
|
|
geforce l33t
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Sun Sep 11, 2005 9:13 pm Post subject: |
|
|
Whoaa merci
J"osais pas toucher au PERL puisque je n'y connais rien..
Je me demandais cependant s'il n'etait pas plus simple de tout faire dans PERL ???
Je me demandais s'il n'avait pas moyen de faire un "PIPE" "Dans" le script perl ??
comme ca je pourrais tout simplement rajouter perl /bin/backup.pl dans crontab ??
Sinon je vais tout simplement passer par un script bash.
Merci beaucoup pour le script !
EDIT: Dans le script PERL, a l'endroit ou on envoie le fichier sur le FTP, n'y a-t'il pas moyen de rajouter une fonction qui m'enverrais un Mail si le backup ne fonctionne pas ? ex: Le serveur FTP gele ?
ex: $connection->write($buffer,$len); or mail moi@localhost ("Ca va MAL !!! backup a pas marche pour $TODAY!!");
Phil _________________ http://tilde.club/~geforce/ |
|
Back to top |
|
|
Ey l33t
Joined: 07 Apr 2005 Posts: 863 Location: Paris
|
Posted: Sun Sep 11, 2005 9:39 pm Post subject: Re: [BACKUP] Par FTP ... |
|
|
Oui c'est faisable d'éxécuter le tar|gzip depuis le script perl :
Code: | #!/usr/bin/perl
use Net::FTP;
`date +\"%F\"` =~ /^(.*)$/;
$date = $1;
open(SOURCE,"tar --preservechown --preservepermissions répertoire | gzip -|");
$ftp = Net::FTP->new("ey",Debug=>0) or die "Cannot connect to server";
$ftp->login("anonymous",'password@nowhere.com') or die "Cannot login";
$ftp->cwd("/backups") or die "Cannot change directory";
$connection = $ftp->stor($date.".tar.gz");
while ( $len = read SOURCE , $buffer, 1024, 0 )
{
if($connection->write($buffer,$len)!=$len)
{
die("Erreur lors de l'écriture");
}
}
$connection->close();
$ftp->quit; |
Comme ça cron doit t'envoyer un mail (y a un "Erreur lors de l'écriture" sur stdout) |
|
Back to top |
|
|
geforce l33t
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Sun Sep 11, 2005 9:55 pm Post subject: |
|
|
Coool!
Je teste et je t'en reparle !
Whooa j'me met au perl ! Trop hot !
Merci !!
Phil _________________ http://tilde.club/~geforce/ |
|
Back to top |
|
|
geforce l33t
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Sun Sep 11, 2005 10:35 pm Post subject: |
|
|
Bon j'ai
Quote: | geforce bin # ./backup.pl
tar: Removing leading `/' from member names
Cannot login at ./backup.pl line 13.
sh: line 1: 28484 Broken pipe tar -cp --atime-preserve /pub
28485 | gzip -
|
_________________ http://tilde.club/~geforce/ |
|
Back to top |
|
|
Enlight Advocate
Joined: 28 Oct 2004 Posts: 3519 Location: Alsace (France)
|
Posted: Sun Sep 11, 2005 10:43 pm Post subject: |
|
|
Je connais que dalle à perl mais quelque chose me dit que :
Quote: | open(SOURCE,"tar --preservechown --preservepermissions répertoire | gzip -|");
$ftp = Net::FTP->new("ey",Debug=>0) or die "Cannot connect to server";
$ftp->login("anonymous",'password@nowhere.com') or die "Cannot login"; |
le répertoire que tu veix targézipper ne s'appele pas "répertoire", que ton password n'est pas "password" et que ton ftp n'a pas "nowhere.com" comme url
ps : Ey si' t'as un lien vers un bon gros tuto perl, ce serait avec plaisir
edit : pour ce que j'ai lu t'as qu'a les changer pour $argv[n] où n est le numéro de paramètre en ligne de commande que tu souhaites passer. |
|
Back to top |
|
|
Ey l33t
Joined: 07 Apr 2005 Posts: 863 Location: Paris
|
Posted: Sun Sep 11, 2005 11:04 pm Post subject: |
|
|
Enlight wrote: | ps : Ey si' t'as un lien vers un bon gros tuto perl, ce serait avec plaisir |
Désolé mais non je ne connais pas de super tutorial bien fait qui t'explique perl dans sa totalité...
Mais si tu veux commencer il y a toujours les tutos officiels notament celui sur les expressions régulières qui fait bien le tour de ce que tu peux faire avec perl. |
|
Back to top |
|
|
Ey l33t
Joined: 07 Apr 2005 Posts: 863 Location: Paris
|
Posted: Sun Sep 11, 2005 11:08 pm Post subject: |
|
|
Enlight wrote: | le répertoire que tu veix targézipper ne s'appele pas "répertoire", que ton password n'est pas "password" et que ton ftp n'a pas "nowhere.com" comme url |
Oui pardons... je vais mettre les choses au propre...
- remplacer "ey" dans Net::FTP->new("ey",Debug=>0) par le nom du serveur ftp
- remplacer "anonymous" dans $ftp->login("anonymous",'password@nowhere.com') par le nom d'utilisateur
- remplacer "password@nowhere.com" par un mot de passe
- remplacer "répertoire" dans open(SOURCE,"tar --preservechown --preservepermissions répertoire | gzip -|"); par le nom du répertoire
ensuite tu peux utiliser des arguments en ligne de commande pour les différents paramètres comme l'indique enlight sauf que c'est $ARGV[n] et non |
|
Back to top |
|
|
geforce l33t
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Sun Sep 11, 2005 11:35 pm Post subject: |
|
|
Ca me fait des archives corompues..
Code: |
#!/usr/bin/perl
use Net::FTP;
`date +\"%F\"` =~ /^(.*)$/;
$date = $1;
open(SOURCE,"tar -c /pub | gzip -|");
$ftp = Net::FTP->new("monhost",Debug=>0) or die "Connection failure";
$ftp->login("monusername",'monpass') or die "Cannot login";
$ftp->cwd("/backups") or die "Cannot change directory";
$connection = $ftp->stor($date.".tar.gz");
while ( $len = read SOURCE , $buffer, 1024, 0 )
{
if($connection->write($buffer,$len)!=$len)
{
die("Erreur lors de l'écriture");
}
}
print "tout a bien ete";
$connection->close();
$ftp->quit;
|
_________________ http://tilde.club/~geforce/ |
|
Back to top |
|
|
Ey l33t
Joined: 07 Apr 2005 Posts: 863 Location: Paris
|
Posted: Mon Sep 12, 2005 12:04 am Post subject: |
|
|
Effectivement j'avais oublié quelquechose :
ftp->binary après le login :
Code: |
#!/usr/bin/perl
use Net::FTP;
`date +\"%F\"` =~ /^(.*)$/;
$date = $1;
open(SOURCE,"tar -c /pub | gzip -|");
$ftp = Net::FTP->new("monhost",Debug=>0) or die "Connection failure";
$ftp->login("monusername",'monpass') or die "Cannot login";
$ftp->binary;
$ftp->cwd("/backups") or die "Cannot change directory";
$connection = $ftp->stor($date.".tar.gz");
while ( $len = read SOURCE , $buffer, 1024, 0 )
{
if($connection->write($buffer,$len)!=$len)
{
die("Erreur lors de l'écriture");
}
}
print "tout a bien ete";
$connection->close();
$ftp->quit;
|
|
|
Back to top |
|
|
geforce l33t
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Mon Sep 12, 2005 2:49 am Post subject: |
|
|
Whoaaa
Merci !!!
Tout fonctionne #1
J"ai rajoute les options pour preserver les chown et les timestamps sur les fichiers..
Je vous montre le code source... pour que ca puisse etre utile a ceux dans le besoin
Code: |
#!/usr/bin/perl
use Net::FTP;
`date +\"%F\"` =~ /^(.*)$/;
$date = $1;
open(SOURCE,"tar -pc --atime-preserve /pub | gzip -|");
$ftp = Net::FTP->new("SERVEURFTP",Debug=>0) or die "Connection failure";
$ftp->login("USERNAME",'PASSWORD') or die "Cannot login";
$ftp->binary;
$ftp->cwd("/backups") or die "Cannot change directory";
$connection = $ftp->stor($date.".tar.gz");
while ( $len = read SOURCE , $buffer, 1024, 0 )
{
if($connection->write($buffer,$len)!=$len)
{
die("Erreur lors de l'écriture");
}
}
$connection->close();
$ftp->quit;
|
Et hop un resolu pour moi
Merci pour tout !
Phil _________________ http://tilde.club/~geforce/ |
|
Back to top |
|
|
|