[Cascavel-pm] saber se o arquivo está aberto

Flavio Bei flaviobei em gmail.com
Segunda Setembro 3 12:05:17 PDT 2007


ae marco e solli, valeu pelas dicas...
montei um esquema aqui com o fuser, e fico batendo no arquivo, vendo
se ele ta terminado, quando o ftp termina, o arquivo fica liberado e
eu renomeio ele...
com isso, outro programa busca no diretório por arquivos com a nova
extensão... dai pra frente ta sussa...
agora acho que vai funcionar..
assim que rolar 100% eu posto a solução aqui...

caras, to curtindo o perl, realmente tem mais de um jeito pra resolver
um problema....


abraços


Em 02/09/07, Marco A P D'Andrade<mdacwb em gmail.com> escreveu:
> Sei que estou um tanto atrasado na questão, mas seguem minhas considerações:
>
> Vc poderia ter controle no tempo de execução do robo ? Algo do genero
> ao término fazer um rotate? (isto é solicitavel a quem controla?)
>
> Estes diretórios, são acessados somente por este robo e o seu script,
> ou por outros processos ?
> - Se for somente os 2, vc poderia utilizar um "fuser", para ver se
> algum processo está lendo o arquivo diretorio ... para algo mais
> elaborado, vc poderia até ver o código do fuser (nao aconselho, mas
> viajando demais ;) )
> ** Nem tanto... ao termino fui buscar em nosso "dicionario" :)
>  http://search.cpan.org/~jstowe/Linux-Fuser-1.4/lib/Linux/Fuser.pm
>
>
> Os arquivos alterados são sempre os mesmos ? Ou existe algum mecanismo
> para renomear os arquivos anteriores (do genero date yyyymmddhhss, pid
> ou .old)  ?
> - Se houver, melhor, se não, poderia pedir ?
>
> Vc sabe de quanto em quanto tempo os arquivos são reescritos ? Quanto
> tempo leva ?
> - Outra abordagem poderia ser o "stat", verificando a ultima
> alteração, e se for acima do esperado pelo processo, vc poderia
> iniciar o uso. - eventualmente utilizando também o "fuser".
>
> Vc comentou sobre "trailer", indicado no final...
> - Esta seria uma abordagem que lhe garantiria consistencia, se não
> estiver marcado como concluido, vc aguarda ;)
>
>
> Agora uma coisa que eu utilizo como pratica preservacionista em meu trabalho...
>
> Perl faz mágica, mas eu não. Me digam como controlar a situação (e
> assumam o risco), e depois não venha me dizer que "Perl não é bom para
> este problema", pois se não for bem elaborada a solução, vc com
> certeza ouvirá isto ;)
>
>
> PS: Gastarei mais um paragrafo para pedir desculpas pelo comprimento
> de meu email eheheh
>
>
> Sds,
> Marco Antonio
>
> Em 31/08/07, Solli Honorio<shonorio em gmail.com> escreveu:
> > Cara, eu acho que você pode utilizar também o Linux::Inotify2. Este link
> > (http://peter.makholm.net/2007/08/21/on-handling-email/ )
> > possue um exemplo interessante.
> >
> > Abaixo tem um código meu mais simples ....
> >
> > <code>
> > #!/usr/bin/perl
> > use Linux::Inotify2;
> >
> > my $inotify = new Linux::Inotify2
> >      or die "Unable to create new inotify object: $!";
> >
> > $inotify->watch('/tmp/t.txt', IN_ALL_EVENTS)
> >      or die "Watch creation failed: $!" ; # Take a look at the directory for
> > file changes
> >
> > while () { # Loop forever
> >     my @events = $inotify->read;
> >     $e = shift(@events);
> >     my $name = $e->fullname;
> >     print "$name was accessed\n" if $e->IN_ACCESS;
> >     print "$name is no longer mounted\n" if $e->IN_UNMOUNT;
> >     print "$name is gone\n" if $e->IN_IGNORED;
> >     print "$name is close from write\n" if $e->IN_CLOSE_WRITE;
> >     print "$name is opened\n" if $e->IN_OPEN;
> >     print "events for $name have been lost\n" if $e->IN_Q_OVERFLOW;
> > }
> > </code>
> >
> > On 8/31/07, Flavio Bei <flaviobei em gmail.com > wrote:
> > > opa Ednardo, blz?
> > > eu não posso renomear ele antes de terminar, pois o processo pra
> > > renomear vai ser executado junto com uma mudança dop local do arquivo,
> > > para ele ser processado por outro programa..
> > > sei que parece uma zona, mas é um esquema que já funcionava aqui.,...
> > > mas era manual..
> > >
> > > e hoje apareceu mais uma novidade, esse arquivo vai estar em uso por
> > > um ftp, então preciso esperar o ftp acabar pra mecher nele...
> > >
> > > to tentando o fuser, mas não ta resultando nada útil...
> > >
> > > abraços
> > >
> > > Em 30/08/07, Luciano Giordani Bassani< lgbassani em terra.com.br> escreveu:
> > > > Eu não sabia deste pc -C <nome_prog>, mas aqui funcionou.
> > > > Em todo caso, se tu quiser mesmo utilizar o esquema com o grep, eu
> > recomendo
> > > > tu mudar para algo assim:
> > > > $teste = (`ps xa | grep $retorno\$ | grep -v grep`);
> > > >
> > > > Isso é para evitar que o próprio comando "ps xa | grep" gere um
> > > > "falso-positivo".
> > > >
> > > >
> > > > SDS,
> > > >
> > > > Luciano
> > > >
> > > >
> > > >
> > > > Fernando Oliveira escreveu:
> > > > pq, ao invez de usar 2 comando,  não usa só o ps -C nome_prog???
> > > >
> > > > Em 30/08/07, Flavio Bei < flaviobei em gmail.com > escreveu:
> > > > > consegui uma solução assim, deu certo, mas to com dúvidas... será que
> > > > > o resultado será sempre preciso?
> > > > >
> > > > > o código ficou + - assim
> > > > >
> > > > > ##########################################
> > > > > #!/usr/bin/perl
> > > > > # sistema que vai buscar em um diretório um determinado arquivo
> > > > > # caso o arquivo não esteja em uso por nenhum processo ele é renomeado
> > > > > ##########################################
> > > > >
> > > > > use strict;
> > > > > my $caminho = "/home/user/pasta/";
> > > > > my $extensao = "*.txt";
> > > > > my $completo = $caminho.$extensao;
> > > > > my @encontrados;
> > > > > my $retorno;
> > > > > my $lista;
> > > > > my $teste;
> > > > >
> > > > > $lista = (`ls -1 $completo`);
> > > > >
> > > > > if ($lista ne '')
> > > > > {
> > > > > @encontrados = split('\n', $lista);
> > > > > }
> > > > >
> > > > > foreach $retorno (@encontrados) {
> > > > >
> > > > > $teste = (`ps xa |grep $retorno\$`);
> > > > >
> > > > >         if ($teste eq '')
> > > > >         {
> > > > >         #processa o arquivo pois ele não está em uso por nenhum
> > processo
> > > > >         print ("=======>>> Altera o arquivo $retorno pois não está em
> > > > uso\n");
> > > > >         `mv $retorno $retorno.new`;
> > > > >         }
> > > > >         else
> > > > >         {
> > > > >         #não processa o arquivo pois ele está em uso por algum
> > processo
> > > > >         print ("========>!!!! Não altera o arquivo $retorno\n");
> > > > >         }
> > > > > }
> > > > > ##############################################
> > > > > deu certo, e está rodando de boa, dai joguei na cron e ele fica
> > > > > verificando de tempos em tempos... mas não sei se é a sintaxe do ps,
> > > > > que tem hora que ele não mostra o  processo sendo executado por outro
> > > > > usuário, tem hora que mostra normal...
> > > > > _______________________________________________
> > > > > Cascavel-pm mailing list
> > > > > Cascavel-pm em pm.org
> > > > > http://mail.pm.org/mailman/listinfo/cascavel-pm
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > []'s Fernando ________________________________
> > > >
> > > _______________________________________________
> > > Cascavel-pm
> > > > mailing
> > > > list
> > > Cascavel-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/cascavel-pm
> > > >
> > > > _______________________________________________
> > > > Cascavel-pm mailing list
> > > > Cascavel-pm em pm.org
> > > > http://mail.pm.org/mailman/listinfo/cascavel-pm
> > > >
> > >
> > >
> > > --
> > > --
> > > Flávio Bei
> > > Webdesigner
> > > (11) 8964 5315
> > > _______________________________________________
> > > Cascavel-pm mailing list
> > > Cascavel-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/cascavel-pm
> > >
> >
> >
> >
> > --
> > "o animal satisfeito dorme". - Guimarães Rosa
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>


-- 
--
Flávio Bei
Webdesigner
(11) 8964 5315


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