use strict; use warnings; use DBI; use Asterisk::AMI; use POSIX qw/strftime/;
$|=1; print "Iniciando...\n"; print "[" . strftime('%d-%m-%Y %H:%M:%S', localtime) . "] PID: $$\n"; ... eval { our $connDB = DBI->connect('DBI:mysql:ast_tm;host=bd07.internal.dc', '***********', '************') || die "Nao foi possivel conectar na base de dados: $DBI::errstr"; our $selTM = $connDB->prepare("SELECT ID_Lote, ID_Lote_TM, Numero, Texto, FlgConfirmacao, FlgStatus_Lote, FlgStatus_TM FROM vw_TM_Pendente WHERE (Prioridade > 6) LIMIT 100"); our $updTMc = $connDB->prepare("UPDATE MOV_Lote SET FlgStatus=? WHERE ID=?"); our $updTMi = $connDB->prepare("UPDATE MOV_Lote_TM SET FlgStatus=?, DtHrEnvio=?, OutChannel=? WHERE ID=?"); our $insTMl = $connDB->prepare("INSERT INTO LOG_TM_Main (ID_Lote, DtHrEvento, FlgStatus, Status) VALUES (?, ?, ?, ?)"); ... $insTMl->execute($ID_Lote, strftime('%Y-%m-%d %H:%M:%S', localtime), 13, $Status); ... } if ($@) { $Log($@); # Verifica qual foi o erro, se foi na conexão, conecta em outro server. Se foi no insert, executa uma rotina de atualização da chave, etc. ... } our $AMI = Asterisk::AMI->new(PeerAddr => 'pbx16.internal.dc', PeerPort => '5038', Username => '*******', Secret => '********' ) || die "Nao foi possivel conectar no Asterisk!"; ... eval { my $actid = $AMI->send_action({ ... }); my $respact = $AMI->get_response($actid); ... $chnResponse = $respact->{'Response'}; $chnMessage = $respact->{'Message'}; $chnChannel = $respact->{'PARSED'}->{'Channel'}; ... }; if (($@) || ($chnResponse eq "Error")) { ... return 0; } else { ... return 1; } Esse ai é um pedaço de um dos programas, por questões contratuais eu não posso postar o código. No primeiro "eval" quando ocorre erro de conexão ele na aborta o programa, mais quando ocorre erro no insert, aborta. Tem algumas outras instruções ali, como manipulação de data/hora e abertura de arquivos texto. Algumas não abortam e são tratadas logo abaixo, outras abortam, principalmente os erros evolvendo os arquivos texto. No segundo "eval", quando o {'channel'} não vem aborta, ou quando a conexão com o Asterisk caiu e eu tento executar o send_action. Ou outros erros não abortam. Precisava de uma forma que nenhum erro abortasse para poder trata-los ou pelo menos gravar log. [...]'s Marcio
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer