Discussion:
[shell-script] Executar script
Eldimar Souza eldimax@gmail.com [shell-script]
2018-05-29 14:43:56 UTC
Permalink
Bom dia, senhores, tenho o seguinte script:
#!/bin/bash -x

swap=( $(free -w|grep Swap) )
free=$(echo "scale=2;(${swap[3]}/${swap[1]}) <= 0.50"|bc)
if [[ $free -eq 1 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
qtdprocessos=$(ps aux | grep -v grep | grep -v update | grep -c python3)
if [[ $qtdprocessos -ne 6 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi

Esse script fica executando o tempo todo no crontab, porem a primeira
párte demora pra executar, fazendo com que a segunda parte acabe matando a
execução da primeira, pois ele não acha a quantidade de processo. como faço
pra ele executar a segunda parte apos a verificação da segunda, mas que
isso fique de forma constante? ou seja, quero que todo script seja
executado, mas que a segunda condição não ocorra caso a primeira esteja
acontecendo
--
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-05-29 15:00:42 UTC
Permalink
ola

eu não entendi 100% o seu problema.

em geral um script vai executar sequencialmente cada linha, ate o fim

a unica forma pra "uma metade do script matar a primeira" é se vc executa a
primeira em background

porem eu olho e não consigo detectar a fonte do seu problema, pode
descrever melhor?
Post by Eldimar Souza ***@gmail.com [shell-script]
#!/bin/bash -x
swap=( $(free -w|grep Swap) )
free=$(echo "scale=2;(${swap[3]}/${swap[1]}) <= 0.50"|bc)
if [[ $free -eq 1 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
qtdprocessos=$(ps aux | grep -v grep | grep -v update | grep -c python3)
if [[ $qtdprocessos -ne 6 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
Esse script fica executando o tempo todo no crontab, porem a primeira
párte demora pra executar, fazendo com que a segunda parte acabe matando a
execução da primeira, pois ele não acha a quantidade de processo. como faço
pra ele executar a segunda parte apos a verificação da segunda, mas que
isso fique de forma constante? ou seja, quero que todo script seja
executado, mas que a segunda condição não ocorra caso a primeira esteja
acontecendo
--
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-05-29 16:47:36 UTC
Permalink
Que acontece, a primeira parte executa em background, (a parte do codigo
que chama o script click2), ela executa outro script que levanta os 6
processos verificados pela segunda parte, acabei usando um sleep 60, mas
queria ver outra possibilidade., pois o script executa o tempo todo
Post by Tiago Peczenyj ***@gmail.com [shell-script]
ola
eu não entendi 100% o seu problema.
em geral um script vai executar sequencialmente cada linha, ate o fim
a unica forma pra "uma metade do script matar a primeira" é se vc executa
a primeira em background
porem eu olho e não consigo detectar a fonte do seu problema, pode
descrever melhor?
Post by Eldimar Souza ***@gmail.com [shell-script]
#!/bin/bash -x
swap=( $(free -w|grep Swap) )
free=$(echo "scale=2;(${swap[3]}/${swap[1]}) <= 0.50"|bc)
if [[ $free -eq 1 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
qtdprocessos=$(ps aux | grep -v grep | grep -v update | grep -c python3)
if [[ $qtdprocessos -ne 6 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
Esse script fica executando o tempo todo no crontab, porem a primeira
párte demora pra executar, fazendo com que a segunda parte acabe matando a
execução da primeira, pois ele não acha a quantidade de processo. como faço
pra ele executar a segunda parte apos a verificação da segunda, mas que
isso fique de forma constante? ou seja, quero que todo script seja
executado, mas que a segunda condição não ocorra caso a primeira esteja
acontecendo
--
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
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-05-29 17:53:51 UTC
Permalink
A variável $! te devolve o PID do último processo em background e o cmd
wait PID espera o PID finalizar, assim sendo, creio que se vc trocar o
sleep por um wait $!, deve funcionar.

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]
Que acontece, a primeira parte executa em background, (a parte do codigo
que chama o script click2), ela executa outro script que levanta os 6
processos verificados pela segunda parte, acabei usando um sleep 60, mas
queria ver outra possibilidade., pois o script executa o tempo todo
Post by Tiago Peczenyj ***@gmail.com [shell-script]
ola
eu não entendi 100% o seu problema.
em geral um script vai executar sequencialmente cada linha, ate o fim
a unica forma pra "uma metade do script matar a primeira" é se vc executa
a primeira em background
porem eu olho e não consigo detectar a fonte do seu problema, pode
descrever melhor?
Post by Eldimar Souza ***@gmail.com [shell-script]
#!/bin/bash -x
swap=( $(free -w|grep Swap) )
free=$(echo "scale=2;(${swap[3]}/${swap[1]}) <= 0.50"|bc)
if [[ $free -eq 1 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
qtdprocessos=$(ps aux | grep -v grep | grep -v update | grep -c python3)
if [[ $qtdprocessos -ne 6 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
Esse script fica executando o tempo todo no crontab, porem a primeira
párte demora pra executar, fazendo com que a segunda parte acabe matando a
execução da primeira, pois ele não acha a quantidade de processo. como faço
pra ele executar a segunda parte apos a verificação da segunda, mas que
isso fique de forma constante? ou seja, quero que todo script seja
executado, mas que a segunda condição não ocorra caso a primeira esteja
acontecendo
--
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-05-29 18:15:51 UTC
Permalink
Boa tarde, Senhores,

Tinha resolvido com o sleep 60, mas agora estou usando o wait $! como na
dica do mestre Julio e funcionou de forma mais arrojada.
Obrigado a todos e vida longa ao shell
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
A variável $! te devolve o PID do último processo em background e o cmd
wait PID espera o PID finalizar, assim sendo, creio que se vc trocar o
sleep por um wait $!, deve funcionar.
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
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]
Que acontece, a primeira parte executa em background, (a parte do codigo
que chama o script click2), ela executa outro script que levanta os 6
processos verificados pela segunda parte, acabei usando um sleep 60, mas
queria ver outra possibilidade., pois o script executa o tempo todo
Post by Tiago Peczenyj ***@gmail.com [shell-script]
ola
eu não entendi 100% o seu problema.
em geral um script vai executar sequencialmente cada linha, ate o fim
a unica forma pra "uma metade do script matar a primeira" é se vc
executa a primeira em background
porem eu olho e não consigo detectar a fonte do seu problema, pode
descrever melhor?
Post by Eldimar Souza ***@gmail.com [shell-script]
#!/bin/bash -x
swap=( $(free -w|grep Swap) )
free=$(echo "scale=2;(${swap[3]}/${swap[1]}) <= 0.50"|bc)
if [[ $free -eq 1 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
qtdprocessos=$(ps aux | grep -v grep | grep -v update | grep -c python3)
if [[ $qtdprocessos -ne 6 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
Esse script fica executando o tempo todo no crontab, porem a primeira
párte demora pra executar, fazendo com que a segunda parte acabe matando a
execução da primeira, pois ele não acha a quantidade de processo. como faço
pra ele executar a segunda parte apos a verificação da segunda, mas que
isso fique de forma constante? ou seja, quero que todo script seja
executado, mas que a segunda condição não ocorra caso a primeira esteja
acontecendo
--
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."
^ ^
Tiago Peczenyj tiago.peczenyj@gmail.com [shell-script]
2018-05-29 21:17:03 UTC
Permalink
Vc pode também não executar e background. Simplifica demais
Post by Eldimar Souza ***@gmail.com [shell-script]
Boa tarde, Senhores,
Tinha resolvido com o sleep 60, mas agora estou usando o wait $! como
na dica do mestre Julio e funcionou de forma mais arrojada.
Obrigado a todos e vida longa ao shell
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
A variável $! te devolve o PID do último processo em background e o cmd
wait PID espera o PID finalizar, assim sendo, creio que se vc trocar o
sleep por um wait $!, deve funcionar.
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
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]
Que acontece, a primeira parte executa em background, (a parte do codigo
que chama o script click2), ela executa outro script que levanta os 6
processos verificados pela segunda parte, acabei usando um sleep 60, mas
queria ver outra possibilidade., pois o script executa o tempo todo
Post by Tiago Peczenyj ***@gmail.com [shell-script]
ola
eu não entendi 100% o seu problema.
em geral um script vai executar sequencialmente cada linha, ate o fim
a unica forma pra "uma metade do script matar a primeira" é se vc
executa a primeira em background
porem eu olho e não consigo detectar a fonte do seu problema, pode
descrever melhor?
Post by Eldimar Souza ***@gmail.com [shell-script]
#!/bin/bash -x
swap=( $(free -w|grep Swap) )
free=$(echo "scale=2;(${swap[3]}/${swap[1]}) <= 0.50"|bc)
if [[ $free -eq 1 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
qtdprocessos=$(ps aux | grep -v grep | grep -v update | grep -c python3)
if [[ $qtdprocessos -ne 6 ]]; then
/home/comef/roboloide/scripts/click2.sh
fi
Esse script fica executando o tempo todo no crontab, porem a
primeira párte demora pra executar, fazendo com que a segunda parte acabe
matando a execução da primeira, pois ele não acha a quantidade de processo.
como faço pra ele executar a segunda parte apos a verificação da segunda,
mas que isso fique de forma constante? ou seja, quero que todo script seja
executado, mas que a segunda condição não ocorra caso a primeira esteja
acontecendo
--
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."
^ ^
--
Tiago B. Peczenyj

http://about.me/peczenyj
itamarnet@yahoo.com.br [shell-script]
2018-05-29 15:41:03 UTC
Permalink
Caro Eldimar

Assim como o Tiago também não entendi, e concordo com as observações feitas por ele.


Mas o problema não seria a execução do script novamente pelo tempo na cron, afinal vc diz que o processo demora na primeira parte, então essa demora não estaria sendo maior que o tempo periódico de execução pelo cron.


Uma solução seria ou usar uma arquivo named pipe ou um arquivo de lock para impedir uma execução caso o script ainda esteja sendo executado no agendamento anterior do cron.
Ou se for possível aumentar o tempo entre as execuções do processo.


Pelo código em si não vejo nada que trave, exceto que haja algo no "click2.sh" que esteja causando isso.


[]'s
Itamar
Loading...