Discussion:
[shell-script] Ler aquivo
Eldimar Souza eldimax@gmail.com [shell-script]
2018-07-20 01:35:12 UTC
Permalink
Boa noite, senhores!
tenho uma aplicação que gera uma saida num arquivo txt. porem as vezes o
sistema trava, tem como ler o arquivo e caso ele não tenho sido escrito em
determinado intervalo de tempo, executar determinada ação(nesse caso eu
reiniciaria o processo)
--
Eldimar Jaconias de Souza
Analista de Suporte Pleno
Tel: (61) 9228-9214 / 3048-1034

"O que fazer, pra onde ir senhor se só tu tens as palavras de Vida Eterna"

ºvº "Software Livre: não é pelo dinheiro.
/( _ )\ É uma questão de consciência."
^ ^
Nicolas Zachow nicolas@nicolas.eti.br [shell-script]
2018-07-20 05:33:18 UTC
Permalink
Boa noite !

Uma alternativa de força bruta seria criar um script que calcula a
diferença entre 'stat - c %Y $ARQUIVO' e 'date +%s'.
Se este valor for maior do que um valor mínimo você pode reiniciar o
processo.
De posse deste script bastaria coloca-lo no cron em um intervalo que você
considere adequado.

Imagino que exista alguma solução mais _elegante_ para isso mas não me
ocorre nada no momento.
Post by Eldimar Souza ***@gmail.com [shell-script]
Boa noite, senhores!
tenho uma aplicação que gera uma saida num arquivo txt. porem as vezes
o sistema trava, tem como ler o arquivo e caso ele não tenho sido escrito
em determinado intervalo de tempo, executar determinada ação(nesse caso eu
reiniciaria o processo)
--
Eldimar Jaconias de Souza
Analista de Suporte Pleno
Tel: (61) 9228-9214 / 3048-1034
"O que fazer, pra onde ir senhor se só tu tens as palavras de Vida Eterna"
ºvº "Software Livre: não é pelo dinheiro.
/( _ )\ É uma questão de consciência."
^ ^
--
Nicolas Zachow
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-07-20 11:55:33 UTC
Permalink
Fala Eldimar,
no read do bash (do ksh ou sh não) existe o opção -t N, onde N é o número
de segundos para a leitura terminar. Entenda-se por leitura terminar com um
final de registro ou um <ENTER>. Teste isso:

read -t 1 -p "Informe seu nome completo: " Nom || printf '\nSeja mais
rápido\n'

Se vc conseguir informar o nome antes de 1 segundo, ele será armazenado na
variável $Nom, caso contrario, ganhará uma msg te gozando.

Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» O treinamento está muito caro?*
*O melhor de todos em EAD é http://www.dicas-l.com.br/cursos/psl/
<http://www.dicas-l.com.br/cursos/psl/>*

*Damos treinamento em sua empresa **com certificado*
*e nota fiscal **por **um preço, **no mínimo, 50% **abaixo*
*de qualquer curso.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas.. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by Eldimar Souza ***@gmail.com [shell-script]
Boa noite, senhores!
tenho uma aplicação que gera uma saida num arquivo txt. porem as vezes
o sistema trava, tem como ler o arquivo e caso ele não tenho sido escrito
em determinado intervalo de tempo, executar determinada ação(nesse caso eu
reiniciaria o processo)
--
Eldimar Jaconias de Souza
Analista de Suporte Pleno
Tel: (61) 9228-9214 / 3048-1034
"O que fazer, pra onde ir senhor se só tu tens as palavras de Vida Eterna"
ºvº "Software Livre: não é pelo dinheiro.
/( _ )\ É uma questão de consciência."
^ ^
Tiago Peczenyj tiago.peczenyj@gmail.com [shell-script]
2018-07-20 12:46:33 UTC
Permalink
vamos la

primeiro, essa aplicação é sua/ vc tem acesso ao codigo fonte? se sim, e se
isso é um daemon, vc pode pensar em utilizar o systemd com watchdog. nesse
caso a sua aplicação tem que fazer uma chama da de sistema executando
"sd_notify"
frequentemente ou o systemd ira reiniciar automagicamente

se vc não pode, como vc sabe que, se o sistema parou de escrever que ele
travou? pode acontecer dele não ter mais nada para fazer?

eu pensaria em fazer o seguinte em um script:

defina um intervalo de tempo ( ex: 5 minutos )

loop:
1. pegue alguma propriedade do arquivo ( tamanho em bytes, hash md5, etc )
2. compare com a propriedade lida antes ( se não for a primeira vez ), se
for diferente, reinicie
3. durma pelo intervalo de tempo
4. recomeça o loop

pode ser realmente trivial vc pegar o tamanho em bytes. se parou de
escrever, então o tamanho não vai mudar

em bash

SIZE=$( stat --printf="%s" arquivo )
Post by Eldimar Souza ***@gmail.com [shell-script]
Boa noite, senhores!
tenho uma aplicação que gera uma saida num arquivo txt. porem as vezes
o sistema trava, tem como ler o arquivo e caso ele não tenho sido escrito
em determinado intervalo de tempo, executar determinada ação(nesse caso eu
reiniciaria o processo)
--
Eldimar Jaconias de Souza
Analista de Suporte Pleno
Tel: (61) 9228-9214 / 3048-1034
"O que fazer, pra onde ir senhor se só tu tens as palavras de Vida Eterna"
ºvº "Software Livre: não é pelo dinheiro.
/( _ )\ É uma questão de consciência."
^ ^
--
Tiago B. Peczenyj

http://about.me/peczenyj
Eldimar Souza eldimax@gmail.com [shell-script]
2018-07-20 13:30:00 UTC
Permalink
Cara Thiago,
Essa minha aplicação fica gerando umas linhas (ela pega a leitura de
três sensores conectados em um arduino) essa leitura é salva em um arquivo
csv. porem as vezes a aplicação, consequentemente, o arquivo para de ser
escrito... meu intuito é: fico lendo esse arquivo, caso ele não tenho sido
escrito em um intervalo de tempo, vou reiniciar a aplicação. ela não roda
como daemom
Post by Tiago Peczenyj ***@gmail.com [shell-script]
vamos la
primeiro, essa aplicação é sua/ vc tem acesso ao codigo fonte? se sim, e
se isso é um daemon, vc pode pensar em utilizar o systemd com watchdog.
nesse caso a sua aplicação tem que fazer uma chama da de sistema executando
"sd_notify" frequentemente ou o systemd ira reiniciar automagicamente
se vc não pode, como vc sabe que, se o sistema parou de escrever que ele
travou? pode acontecer dele não ter mais nada para fazer?
defina um intervalo de tempo ( ex: 5 minutos )
1. pegue alguma propriedade do arquivo ( tamanho em bytes, hash md5, etc )
2. compare com a propriedade lida antes ( se não for a primeira vez ), se
for diferente, reinicie
3. durma pelo intervalo de tempo
4. recomeça o loop
pode ser realmente trivial vc pegar o tamanho em bytes. se parou de
escrever, então o tamanho não vai mudar
em bash
SIZE=$( stat --printf="%s" arquivo )
Post by Eldimar Souza ***@gmail.com [shell-script]
Boa noite, senhores!
tenho uma aplicação que gera uma saida num arquivo txt. porem as vezes
o sistema trava, tem como ler o arquivo e caso ele não tenho sido escrito
em determinado intervalo de tempo, executar determinada ação(nesse caso eu
reiniciaria o processo)
--
Eldimar Jaconias de Souza
Analista de Suporte Pleno
Tel: (61) 9228-9214 / 3048-1034
"O que fazer, pra onde ir senhor se só tu tens as palavras de Vida Eterna"
ºvº "Software Livre: não é pelo dinheiro.
/( _ )\ É uma questão de consciência."
^ ^
--
Tiago B. Peczenyj
http://about.me/peczenyj
--
Eldimar Jaconias de Souza
Analista de Suporte Pleno
Tel: (61) 9228-9214 / 3048-1034

"O que fazer, pra onde ir senhor se só tu tens as palavras de Vida Eterna"

ºvº "Software Livre: não é pelo dinheiro.
/( _ )\ É uma questão de consciência."
^ ^
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-07-20 14:55:14 UTC
Permalink
Eldimar vc tentou fazer o read com a opção -t conforme expliquei?

Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» O treinamento está muito caro?*
*O melhor de todos em EAD é http://www.dicas-l.com.br/cursos/psl/
<http://www.dicas-l.com.br/cursos/psl/>*

*Damos treinamento em sua empresa **com certificado*
*e nota fiscal **por **um preço, **no mínimo, 50% **abaixo*
*de qualquer curso.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas.. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by Eldimar Souza ***@gmail.com [shell-script]
Cara Thiago,
Essa minha aplicação fica gerando umas linhas (ela pega a leitura de
três sensores conectados em um arduino) essa leitura é salva em um arquivo
csv. porem as vezes a aplicação, consequentemente, o arquivo para de ser
escrito... meu intuito é: fico lendo esse arquivo, caso ele não tenho sido
escrito em um intervalo de tempo, vou reiniciar a aplicação. ela não roda
como daemom
Em sex, 20 de jul de 2018 às 09:49, Tiago Peczenyj
Post by Tiago Peczenyj ***@gmail.com [shell-script]
vamos la
primeiro, essa aplicação é sua/ vc tem acesso ao codigo fonte? se sim, e
se isso é um daemon, vc pode pensar em utilizar o systemd com watchdog.
nesse caso a sua aplicação tem que fazer uma chama da de sistema executando
"sd_notify" frequentemente ou o systemd ira reiniciar automagicamente
se vc não pode, como vc sabe que, se o sistema parou de escrever que ele
travou? pode acontecer dele não ter mais nada para fazer?
defina um intervalo de tempo ( ex: 5 minutos )
1. pegue alguma propriedade do arquivo ( tamanho em bytes, hash md5, etc )
2. compare com a propriedade lida antes ( se não for a primeira vez ),
se for diferente, reinicie
3. durma pelo intervalo de tempo
4. recomeça o loop
pode ser realmente trivial vc pegar o tamanho em bytes. se parou de
escrever, então o tamanho não vai mudar
em bash
SIZE=$( stat --printf="%s" arquivo )
Post by Eldimar Souza ***@gmail.com [shell-script]
Boa noite, senhores!
tenho uma aplicação que gera uma saida num arquivo txt. porem as
vezes o sistema trava, tem como ler o arquivo e caso ele não tenho sido
escrito em determinado intervalo de tempo, executar determinada ação(nesse
caso eu reiniciaria o processo)
--
Eldimar Jaconias de Souza
Analista de Suporte Pleno
Tel: (61) 9228-9214 / 3048-1034
"O que fazer, pra onde ir senhor se só tu tens as palavras de Vida Eterna"
ºvº "Software Livre: não é pelo dinheiro.
/( _ )\ É uma questão de consciência."
^ ^
--
Tiago B. Peczenyj
http://about.me/peczenyj
--
Eldimar Jaconias de Souza
Analista de Suporte Pleno
Tel: (61) 9228-9214 / 3048-1034
"O que fazer, pra onde ir senhor se só tu tens as palavras de Vida Eterna"
ºvº "Software Livre: não é pelo dinheiro.
/( _ )\ É uma questão de consciência."
^ ^
romano@rcamoto.com.br [shell-script]
2018-07-20 14:47:31 UTC
Permalink
Olá a todos. Olá Eldimar.

Você pode usar um find com um critério de tempo (modificação, por exemplo) e o argumento exec:
https://www.hostinger.com.br/tutoriais/comandos-linux-find-e-locate/#Procurando-por-tempo https://www.hostinger.com.br/tutoriais/comandos-linux-find-e-locate/#Procurando-por-tempo

find ./ -mmin -0.5 -exec xxxxxx {} \;

Renato Romano - São B. Campo/SP
------------------------------------------------------------------------------------------------
romano@rcamoto.com.br [shell-script]
2018-07-20 15:11:57 UTC
Permalink
O código saiu cortado. É tudo na mesma linha:

find ./ -mmin -0.5 -exec xxxxxx {} \;
Carlos Alberto Teixeira Magalhães carlos.alberto.tm@gmail.com [shell-script]
2018-07-20 16:48:40 UTC
Permalink
Boa tarde a todos.

Eldimar, sugestão: se este arquivo contiver o momento de cada gravação, com
um tail -n1 nesse arquivo você poderia comparar esse momento com a hora
atual da máquina. Caso a diferença seja muito grande (esse muito grande
quem define é você), considera-se que a aplicação parou de gravar.

Até mais.
Post by ***@rcamoto.com.br [shell-script]
find ./ -mmin -0.5 -exec xxxxxx {} \;
--
Carlos Alberto Teixeira Magalhães
Analista de Suporte IV
Departamento de Informática - DI
Universidade Estadual do Ceará - UECE


*A aplicação pediu: "Requires Windows XP, Vista, 7 or better". Então eu
instalei Linux.*

*A Ciência da Computação nasceu para resolver problemas que não existiriam
se não fosse o computador.*
Eldimar Souza eldimax@gmail.com [shell-script]
2018-07-20 17:32:31 UTC
Permalink
Senhores,

Resolvi com a dico do mestre julio.

Obrigado a todos mais uma vez


Em sex, 20 de jul de 2018 às 13:55, Carlos Alberto Teixeira Magalhães
Post by Carlos Alberto Teixeira Magalhães ***@gmail.com [shell-script]
Boa tarde a todos.
Eldimar, sugestão: se este arquivo contiver o momento de cada gravação,
com um tail -n1 nesse arquivo você poderia comparar esse momento com a hora
atual da máquina. Caso a diferença seja muito grande (esse muito grande
quem define é você), considera-se que a aplicação parou de gravar.
Até mais.
Post by ***@rcamoto.com.br [shell-script]
find ./ -mmin -0.5 -exec xxxxxx {} \;
--
Carlos Alberto Teixeira Magalhães
Analista de Suporte IV
Departamento de Informática - DI
Universidade Estadual do Ceará - UECE
*A aplicação pediu: "Requires Windows XP, Vista, 7 or better". Então eu
instalei Linux.*
*A Ciência da Computação nasceu para resolver problemas que não existiriam
se não fosse o computador.*
--
Eldimar Jaconias de Souza
Analista de Suporte Pleno
Tel: (61) 9228-9214 / 3048-1034

"O que fazer, pra onde ir senhor se só tu tens as palavras de Vida Eterna"

ºvº "Software Livre: não é pelo dinheiro.
/( _ )\ É uma questão de consciência."
^ ^
Loading...