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

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

Re: rodar via CRON ou DAEMON?


From: Cristiano
Subject: Re: rodar via CRON ou DAEMON?
Date: Thu, 29 Jul 2010 14:17:19 -0000
User-agent: eGroups-EW/0.82

--- Em address@hidden, "Julio C. Neves" <julio.neves@...> escreveu
>
> Eu acho que o assunto é bastante pertinente. Opessoal que usa shell
> normalmente é admin e isso é um assunto interessante para qq admin que
> mereça esse nome.
> 
> Eu tentaria uma coisa totalmente diferente, pois acho que compromete menos o
> processador. Seguinte:
> 
> Script1
> =======
> mkfifo tubo
> tail -f <(ls) > tubo
> 
> O processo do tail permanece em waiting enquanto não se cria arquivo e qdo
> criá-lo ele será enviado para o named pipe.
> 
> Script2
> =======
> while :
> do
>     ArqNovo=$(cat tubo)
> ....
> ....
> done
> 
> O named pipe precisa de um cara falando e outro ouvindo. Esse cat tubo
> ligará um semáforo do S.O. e ficará esperando (sem onerar absolutamente
> nada) a mudança deste semáforo que se dará qdo o outro processo "falar" do
> outro lado do tubo e o que ele falou irá para a variável ArqNovo para que vc
> possa trabalhar o dado da forma que vc quiser.
> 
> Se enquanto o script2 estiver trabalhando o dado, for criado um novo
> arquivo, o script1 ficará em waiting até que termine o ciclo do while e o
> prg volte para o cat.
> 
> Cara dê uma olhada em www.julioneves.com. Acho que a parte referente a named
> pipe e substituição de processo [<(ls)] estão no Papo de Botequim 11. Lá tá
> tudo mastigado e cheio de exemplos.


Júlio, entendi sua sugestão, mas não consegui implementá-la.

A atribuição da variável ArqNovo não está funcionando. O subprocesso (cat tubo) 
não retorna, enquanto o tail da outra ponta do pipe não é encerrado e, 
portanto, o loop não gira.

Abri 3 shells no servidor. No primeiro, crei o pipe e rodei o tail. No segundo, 
rodei o cat no pipe e, em um terceiro shell, criei arquivos no diretório. Não 
funcionou. Veja o que fiz:

http://pastebin.com/MrgeP056

Como era esperado, o 'cat pipe' não retorna, enquanto o processo do tail não 
encerra. Mas também não recebe novos dados dele quando crio novos arquivos no 
diretório "dir_in".

O problema de não atualizar quando se cria novos arquivos não está no fato de 
que, embora o tail -f segure o pipe aberto, o ls, por sua vez, é executado uma 
única vez e não há instrução que force sua repetição?





reply via email to

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