Não olhei direito o código, mas me parece que falta fazer um $pos = 0; na hora em que você abre o arquivo novamente...<br><br>[]s<br>Wendel<br><br><div><span class="gmail_quote">On 10/8/07, <b class="gmail_sendername">Arthur Renato Mello
</b> &lt;<a href="mailto:farinha.ufpr@gmail.com">farinha.ufpr@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Ola Monges,<br><br>tenho o seguinte problema: Preciso simular um tail -f em um arquivo de<br>log. Mas com uma funcionalidade a mais, o arquivo pode mudar de nome<br>durante o processo (logrotate). Ou seja, eu comeco a monitorar o
<br>arquivo &quot;log.txt&quot;, apos um tempo o logrotate executa e o arquivo eh<br>renomeado para&nbsp;&nbsp;&quot;log-old.txt&quot;, e um novo log.txt eh criado. O script<br>precisa esquecer o &quot;log-old.txt&quot; (antigo log.txt
 que ja esta aberto) e<br>comecar a monitorar o novo log.txt.<br><br>Um agravante eh que quem solicitou nao gostaria de utilizar nenhum<br>modulo do CPAN, apenas o que for built in da linguagem.<br><br>Eu utilizei um codigo do perl FAQ que mostra como simular tail -f, e
<br>acrescentei uma verificacao de inode (usando stat). Caso o inode do<br>arquivo com mesmo nome, seja diferente do que eu estou usando eu<br>preciso reabrir o arquivo.<br><br>O codigo funciona (esta colado no final). Porem eu estou perdendo as
<br>primeiras linhas do &quot;arquivo novo&quot;, a impressao eh que o comando tell,<br>utilizado no for de leitura soh comeca a fazer efeito quando o tamanho<br>do arquivo novo, passa o tamanaho do antigo. Algo como se o fdescritor
<br>de arquivo estivesse apontando para uma posicao em bytes qqr e so<br>fosse comecara ler dali pra frente. Se isto estiver certo gostaria de<br>alguma ideia de como fazer esse apontador voltar pro comeco do<br>arquivo.<br>
<br>Espero ter me feito entender :). Desde jah agradeco sugestoes de<br>solucoes ou novas abordagens:<br><br>==============================================<br>#!/usr/bin/perl<br><br>use strict;<br>use warnings;<br>#use Fcntl qw(:seek);
<br><br>sub usage{<br>&nbsp;&nbsp;&nbsp;&nbsp;print(&quot;USAGE: $0 &lt;LOGFILE&gt;\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<br>}<br><br>(@ARGV != 1) and usage();<br><br>(my $filename) = @ARGV;<br><br>open(LOG, $filename) or die &quot;Unable to open $filename: $!&quot;;
<br><br>my @old_file;<br>my @new_file;<br><br>@old_file = stat($filename);<br><br>my $w_time = 1;<br>my $pos;<br><br>my $count = 0;<br>my $changed = 0;<br>my $test_file_interval = 10;<br><br>while(1){<br>&nbsp;&nbsp;&nbsp;&nbsp;$pos = 0;<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;for($pos = tell(LOG); $_ = &lt;LOG&gt;; $pos = tell(LOG)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if($changed){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$changed = 0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(LOG);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(! -r $filename){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep($w_time);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;open(LOG, $filename);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if($count == $test_file_interval){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$count = 0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@new_file = stat($filename);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!defined($new_file[1]) or $old_file[1] != $new_file[1]){
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$changed = 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;sleep($w_time);<br>&nbsp;&nbsp;&nbsp;&nbsp;seek(LOG, $pos, 0);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;$count++;<br>}<br> ==============================================<br><br>[]s<br>Arthur<br>___________________________________________
</blockquote></div>