[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