[Cascavel-pm] Novo na lista e com dúvidas

Carlan Calazans vigaristaz em yahoo.com.br
Quarta Junho 30 15:35:50 CDT 2004


Luis Campos de Carvalho wrote:

>   Benvindo à lista! Pelo que eu consegui ver, você encontrou o CPAN.
>   Não está nada mau, para o primeiro mes de Perl... :-)
>   Inscreva-se no www.perlmonks.org, eles tem dicas e truques 
> fantásticos online. :-)

Opa! Obrigado ;)
Já vou fazer o cadastro.

>   Estou assumindo o seguinte, e posso estar enganado:
>   1. Isto tudo roda em um linux (ou outro un*x qualquer);
>   2. Seu mysql roda localmente no servidor;
>   3. Você está usando um script perl com padrão CGI;
>   4. Você roda apache no seu servidor un*x;
>
>   A primeira coisa que pode não estar funcionando corretamente é 
> permissões de arqivo. Me explica (?:como|onde|porque|quando) você 
> grava arquivos, e com que (?:usuários|permissões) faz isso, por favor?
>
>   A segunda coisa que pode estar errada é o caminho para o seu 
> database dump file. Pode ser que o apache "enganou" você, te fazendo 
> acreditar que poderia ver um diretório acima do seu, mas na verdade 
> não é bem assim... você experimentou indicar o caminho completo do 
> arquivo para seu script?
>
>   A terceira coisa que eu olharia no seu lugar é se o FTP para onde 
> você deseja enviar funciona mesmo (e isso inclui permissões de usuário 
> corretas!). Você consegue executar o FTP na mão?
>
Sim para as perguntas 1, 2, 3, 4.
As permissões estão ok, tenho certeza. Antes de criar este cgi fiz uns 
testes com um pl e funcionou perfeitamente, rodando tudo na minha 
máquina e enviando para um ftp externo.

>   Você quis dizer que se aproveitou de um exemplo do Net::FTP para 
> começar a brincadeira? Muito bom, normalmente eles funcionam bem. Mas 
> nem todos os exemplos são confiaveis... :-)
>
>   Se você não se incomodar, eu gostaria de ver o fonte do seu programa...
>   Você precisa mesmo fazer isto rodar sobre padrão CGI imediatamente? 
> O script não poderia rodar sozinho, possivelmente a partir de uma 
> chamada do crontab(1)?
>
>   Putamplexos, benvindo ao grupo e aguardo retorno!

Exatamente! Tive que recorrer a fonte para aprender a usá-lo.
É o que quero, rodar através de um 'cron job', mas antes preciso do 
danado funcionando. Estou enviando o script logo abaixo, provavelmente 
existem erros gritantes.

Você vão rir de mim, mas o que é putamplexo? =)

Obrigadão!

##################################### inicio script 
###########################################
#!/usr/bin/perl -w
# Autor: Carlan Calazans (www.carlan.calazans.nom.br)
use strict;
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use Net::FTP;

print header, start_html("Backup");

# Ajuda
# Formato das variaveis:
# USERBD='nomeusuariocpanel_usuario'
# BD='nomeusuariocpanel_basededados'

my $USERBD='';
my $SENHABD='';
my $BD='';

# Diretorio do webserver
my $DIRLOCAL='/home/user/backup';
# Diretorio do ftpserver
my $DIRDEST='/home/user/bkp';

# Arquivos
my $DATA=`date +%d-%m-%Y`;
chomp($DATA);
my $NARQ="backup-$DATA.sql";
my $ARQ="backup-$DATA.tar.gz";

# ftp1
my $HOSTFTP='';
my $USERFTP='';
my $SENHAFTP='';

# ftp2
# my $HOSTFTP2='';
# my $USERFTP2='';
# my $SENHAFTP2='';

# crie o diretório backup no servidor web
if (!( -d $DIRLOCAL))
{
   system("mkdir $DIRLOCAL");
}

# Cria arquivo de log
print "Gerando o log...<br />";
open(my $LOGUE,">> $DIRLOCAL/backup.log") or die "Nao foi possivel criar 
o arquivo de log...<br />";
print $LOGUE 
"\n############################################################################################\n";
print $LOGUE "Data: ",$DATA,"\n";
print $LOGUE "Base de dados: ", $BD,"\n";
print $LOGUE "Arquivo de backup: ",$ARQ,"\n";
close ($LOGUE);

# Cria e compacta arquivo de backup
system("mysqldump --quick --all --add-drop-table --add-locks 
--lock-tables --quote-names --user=$USERBD --password=$SENHABD $BD > 
$NARQ > /dev/null && tar cvzf $ARQ $NARQ > /dev/null && rm -f $NARQ > 
/dev/null");
print "<br />Arquivo .sql criado com sucesso...<br />";

# Conecta ao FTP
print "Conectando a ",$HOSTFTP,"<br />";

# Envia ao ftp1
my $ftp=Net::FTP->new($HOSTFTP);
$ftp->login($USERFTP, $SENHAFTP) or die "Ops, deu erro. Usuario ou senha 
incorretos...";
$ftp->mkdir($DIRDEST);
$ftp->cwd($DIRDEST) or die "Ops, deu erro. Diretorio nao encontrado...";
$ftp->binary();
$ftp->put($ARQ) or die "Ops, deu erro. Arquivo nao encontrado...";
$ftp->quit();

print "Arquivo enviado com sucesso ;)\n";

# Envia ao ftp2

# Email de confirmacao do backup com o log em anexo

print end_html;
################################## fim script 
##############################################

-- 
Carlan Calazans - Phr34k3r
http://www.linuxrapido.org
Último artigo: Blogando do Linux
Blog: http://www.carlan.calazans.nom.br
Fotolog: http://www.mblog.com/phr34k3r




Mais detalhes sobre a lista de discussão Cascavel-pm