[SP-pm] Subs
Solli Honorio
shonorio at gmail.com
Tue Mar 26 13:44:58 PDT 2013
Legal, se tiver dúvida de pq fiz assim ou assado, é só perguntar !
Solli Honorio
Em 26 de março de 2013 17:04, Marcio - Google <marciorp em gmail.com> escreveu:
> Solli,
>
> Muito obrigado pelos exemplos. Estou lendo o artigo também.
>
> [...]´s
>
> Marcio
>
> Em 26 de março de 2013 09:07, Solli Honorio <shonorio em gmail.com> escreveu:
>
> > Marcio, a minha estrutura básica de script está abaixo mas recomendo
> > fortemente que você leia http://sao-paulo.pm.org/equinocio/2011/set/8
> >
> > Quando eu preciso utilizar fork, eu estou utilizando o
> > Parallel::ForkManager, pois a minha vida ficou muito mais simples.
> >
> > <code>
> > #!/usr/bin/env perl
> > use common::sense;
> > use Unix::PID;
> > use Getopt::Long;
> > use Log::Log4perl;
> > use Config::Simple;
> >
> > use sigtrap 'handler' => \&finish_process, 'INT', 'ABRT', 'QUIT', 'TERM';
> >
> > binmode STDOUT, ":utf8";
> >
> > my $VERSION = '1.00';
> > my ($logger, %CONFIG, %CHECKER);
> >
> > $CONFIG{NUM_PROCESS} = 10; # Numero máximo de processo
> > $CONFIG{TIMEOUT} = 300; # timeout nos processos
> > $CONFIG{stats}{start} = time();
> >
> > Getopt::Long::Configure('bundling');
> > GetOptions(
> > "v|version" => sub { show_version() } ,
> > "h|help" => sub { help() } ,
> > "f|file=s" => \$CONFIG{file} ,
> > );
> >
> > check_data();
> > init_script();
> >
> > # responsável por finalizar o script de maneira correta
> > sub finish_process {
> > $logger->info("Encerrando o processamento");
> >
> > unlink $CONFIG{cfg}->{pid_file};
> >
> > exit 0;
> > }
> >
> > # responsável por verificar se todos os dados fornecido
> > # via linha de comando estão corretas
> > sub check_data {
> > for my $key ( keys %CHECKER ) {
> > if (! $CHECKER{$key}{where}->() ) {
> > say $CHECKER{$key}{documentation};
> > }
> > }
> > }
> >
> > # carrega o arquivo de configuração, inicia o log e
> > # confirma se já não está em execução.
> > sub init_script{
> > Config::Simple->import_from( $CONFIG{file}, \%{$CONFIG{cfg}} );
> > my $log_conf = qq(
> > log4perl.rootLogger = DEBUG, LOG1
> > log4perl.appender.LOG1 = Log::Dispatch::FileRotate
> > log4perl.appender.LOG1.filename = $CONFIG{cfg}->{log_file}
> > log4perl.appender.LOG1.mode = append
> > log4perl.appender.Log1.utf8 = 1
> > log4perl.appender.LOG1.autoflush = 1
> > log4perl.appender.LOG1.max = 31
> > log4perl.appender.LOG1.TZ = America/Sao_Paulo
> > log4perl.appender.LOG1.DatePattern = yyyy-MM-dd
> > log4perl.appender.LOG1.layout =
> > Log::Log4perl::Layout::PatternLayout
> > log4perl.appender.LOG1.layout.ConversionPattern = %d %p %m %n
> > );
> >
> > Log::Log4perl::init(\$log_conf);
> > $logger = Log::Log4perl::get_logger();
> >
> > Unix::PID->new()->pid_file( $CONFIG{cfg}->{pid_file} )
> > or die "Processo já em execução\n";
> >
> > return 1;
> > }
> >
> > # carrega o hash checker com os parametros de verificação
> > BEGIN {
> > %CHECKER = (
> > file => {
> > documentation => 'Informa a localização do arquivo de
> > configuração',
> > required => 1,
> > where => sub { return 1 if -e $CONFIG{file} },
> > },
> > );
> > }
> >
> > # só para garantir (ou não) a remoção do arquivo de pid
> > END {
> > unlink $CONFIG{cfg}->{pid_file};
> > }
> >
> > </code>
> >
> >
> > Em 25 de março de 2013 16:05, Marcio - Google <marciorp em gmail.com
> >escreveu:
> >
> >> Mestres,
> >>
> >> Obrigado por todas as dicas, foram muito valiosas.
> >> Eu utilizo Perl para rotinas de sysadmin e implementações para
> >> Asterisk (AMI e AGI).
> >>
> >> Hernan, nesse Equinócio acho que não consigo escrever um artigo
> ainda.
> >> Estou muito fraco, o conteúdo não séria de interesse de ninguém além de
> mim
> >> ... rsrs ... mas já estou fazendo anotações para escrever um para o
> >> próximo, só não sei se vai ser de interesse da comunidade. Será sobre
> Perl
> >> voltado para Asterisk.
> >>
> >> Voltando ao assunto principal, para mim, pelo menos agora, a melhor
> >> opção para reutilizar o código é o que o Ricardo mostrou. Acho que é
> muita
> >> pouca coisa para criar um módulo, além do que não domino nem o básico do
> >> básico para querer me aventurar por áreas que podem me trazer mais dor
> de
> >> cabeça.
> >>
> >> Sobre o retorno, o que o Solli colocou sobre passar uma referência
> >> para retornar as informações e no retorno mesmo voltar só se concluiu ou
> >> não me agradou bastante, pois já utilizo essa técnica em C#, mais em
> Perl
> >> não sabia como fazer.
> >> Na questão de avisar o consumidor sobre eventuais erros, no meu caso
> é
> >> só log mesmo, pois o que faço é tudo rotina de servidor. Mais
> >> isso suscitou outra dúvida, que colocarei no final.
> >>
> >> Também vou adotar o padrão que o Danie sugeriu para nomenclaturas
>
--
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130326/6505a0bb/attachment-0001.html>
More information about the SaoPaulo-pm
mailing list