shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Como saber se um arquivo está em uso?


From: Andreyev Dias de Melo
Subject: Re: [shell-script] Como saber se um arquivo está em uso?
Date: Tue, 16 Nov 2004 14:23:59 -0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040113 MultiZilla/1.6.4.0b

Miguel Da Silva wrote:
Olá para todos, estou fazendo um script que vai dividir o log do meu servidor
de FTP e separá-lo por semana, quanto a isso nao tenho problemas.

A coisa se complica no seguinte: esse FTP que tenho possui uma movimentaçao
considerável e sempre que há alguma açao o FTP está logando o que acontece.
Bem, suponhamos que justamente na hora que quero processar o arquivo de logs
algum infeliz está baixando alguma coisa e o FTP vai escrever no arquivo e
acontece aqueles erros porque o arquivo está aberto etc e tal. Seria uma
verdadeira coincidência, mas por via das dúvidas queria evitar isso ...

Miguel,

Se ele estiver aberto, e dependendo de como ele estiver aberto, vc não poderá removê-lo, mas poderá apagar seu conteúdo, sobreescrevendo-o com o "buraco negro" do Unix, o /dev/null.

Alguém sabe faço para saber se um arquivo está aberto?! O Linux gera algum
arquivo lock?!

Alguns serviços gravam seu PID no /var/run/, por exemplo o apache usa o '/var/run/httpd.pid', e ainda usando o apache como exemplo, fazem um link simbólico do /proc para seu arquivo de log:

   $ ls -la /proc/18802/fd/2
lrwx------ 1 root root 64 Nov 16 14:15 /proc/18802/fd/2 -> /var/log/httpd/error_log

Como dito por outros colegas, vc pode ver se o lsof ou o fuser não atendem as suas necessidades, e acho que talvez o utilitário 'logrotate' seja interessante pra vc tbm.

BTW, como esta é uma lista de shell-script, vc mesmo pode tentar rodar seus 
logs:

[ "$(date +%a" == "Sun" -a ! -e "ftp_logfile_week$(date +%V)" ] && (cp ftp_logfile "ftp_logfile_week$(date +%V)"; cat /dev/null > ftp_logfile; kill -HUP $(cat /var/run/ftpd.pid) )

Ou seja, se hoje for domingo e não existir um ftp_logfile_week desta semana, copia o ftp_logfile para o ftp_logfile_week desta semana, esvazia o arquivo com nada e 'sacode' seu daemon de ftp.

Como sempre, eu NÃO testei o comando acima, NÃO teste-o em ambientes de produção!!! HIH!

Andreyev


reply via email to

[Prev in Thread] Current Thread [Next in Thread]