Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[BACKUP] Par FTP ... [Résolu]
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 653
Location: Canada

PostPosted: Sun Sep 11, 2005 5:58 pm    Post subject: [BACKUP] Par FTP ... [Résolu] Reply with quote

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
_________________
User #29433


Last edited by geforce on Mon Sep 12, 2005 2:50 am; edited 1 time in total
Back to top
View user's profile Send private message
Ey
l33t
l33t


Joined: 07 Apr 2005
Posts: 863
Location: Paris

PostPosted: Sun Sep 11, 2005 6:39 pm    Post subject: Re: [BACKUP] Par FTP ... Reply with quote

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
View user's profile Send private message
Ey
l33t
l33t


Joined: 07 Apr 2005
Posts: 863
Location: Paris

PostPosted: Sun Sep 11, 2005 6:45 pm    Post subject: Re: [BACKUP] Par FTP ... Reply with quote

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
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 653
Location: Canada

PostPosted: Sun Sep 11, 2005 9:13 pm    Post subject: Reply with quote

Whoaa merci :P


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
_________________
User #29433
Back to top
View user's profile Send private message
Ey
l33t
l33t


Joined: 07 Apr 2005
Posts: 863
Location: Paris

PostPosted: Sun Sep 11, 2005 9:39 pm    Post subject: Re: [BACKUP] Par FTP ... Reply with quote

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
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 653
Location: Canada

PostPosted: Sun Sep 11, 2005 9:55 pm    Post subject: Reply with quote

Coool!

Je teste et je t'en reparle !


Whooa j'me met au perl ! Trop hot !

Merci !!

Phil
_________________
User #29433
Back to top
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 653
Location: Canada

PostPosted: Sun Sep 11, 2005 10:35 pm    Post subject: Reply with quote

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 -

_________________
User #29433
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Sun Sep 11, 2005 10:43 pm    Post subject: Reply with quote

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 :wink:

ps : Ey si' t'as un lien vers un bon gros tuto perl, ce serait avec plaisir :D

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
View user's profile Send private message
Ey
l33t
l33t


Joined: 07 Apr 2005
Posts: 863
Location: Paris

PostPosted: Sun Sep 11, 2005 11:04 pm    Post subject: Reply with quote

Enlight wrote:
ps : Ey si' t'as un lien vers un bon gros tuto perl, ce serait avec plaisir :D

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
View user's profile Send private message
Ey
l33t
l33t


Joined: 07 Apr 2005
Posts: 863
Location: Paris

PostPosted: Sun Sep 11, 2005 11:08 pm    Post subject: Reply with quote

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 :wink:

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
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 653
Location: Canada

PostPosted: Sun Sep 11, 2005 11:35 pm    Post subject: Reply with quote

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;

_________________
User #29433
Back to top
View user's profile Send private message
Ey
l33t
l33t


Joined: 07 Apr 2005
Posts: 863
Location: Paris

PostPosted: Mon Sep 12, 2005 12:04 am    Post subject: Reply with quote

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
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 653
Location: Canada

PostPosted: Mon Sep 12, 2005 2:49 am    Post subject: Reply with quote

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 :P


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 :P

Merci pour tout !


Phil
_________________
User #29433
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum