shell script verifica porta em uso e executa ação

1. shell script verifica porta em uso e executa ação

Thiago Brunet
TKratos

(usa Ubuntu)

Enviado em 13/12/2016 - 10:14h

Bom dia amigos, estou tentando fazer um script que verifique se a porta esta em uso e executa ação.. fiz um para o mysql e outro para o apache.. mas para o apache ele não executa corretamente, provavelmente por causa da porta 80 que fica em uso por outros programas, troquei a porta para 8081 mas ainda sim continua o problema.
Este é o erro, ele cai no else sempre.

./httpd.sh: 9: [: tcp6: unexpected operator
Apache não iniciado, iniciando...
[ ok ] Starting apache2 (via systemctl): apache2.service.

o script é igual tanto para o mysql quanto para o apache, só troquei as portas e o comando para iniciar ou parar. Alguém pode me dar uma luz?

Obrigado.

#!/bin/sh
ntstat=`netstat -ap tcp | grep 8081 | sed -n '1p'`
port=".8081*"

#echo $ntstat
#echo $port

if [ $ntstat =~ $port ]; then
echo "Apache iniciado, parando...";
wait 5; /etc/init.d/apache2 stop;
else
echo "Apache não iniciado, iniciando...";
wait 5; /etc/init.d/apache2 start;
fi


  


2. Re: shell script verifica porta em uso e executa ação

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/12/2016 - 10:25h

Dando uma olhada rapida


if [ $ntstat =~ $port ]; then


Não pode usar =~ em [ ], use [[ ]], que é especifico do bash, e #!/bin/sh chama dash no debian

no inicio
 #!/bin/bash  

 #!/usr/bin/env bash  


e use
 [[ "$ntstat" =~ "$port" ]]; then  




Não pude testar porque não tenho apache, mas olhando já vi isso.




3. Re: shell script verifica porta em uso e executa ação

Thiago Brunet
TKratos

(usa Ubuntu)

Enviado em 13/12/2016 - 11:57h

laika escreveu:

Dando uma olhada rapida


if [ $ntstat =~ $port ]; then


Não pode usar =~ em [ ], use [[ ]], que é especifico do bash, e #!/bin/sh chama dash no debian

no inicio
 #!/bin/bash  

 #!/usr/bin/env bash  


e use
 [[ "$ntstat" =~ "$port" ]]; then  




Não pude testar porque não tenho apache, mas olhando já vi isso.






Ok, fiz as alterações mais ainda sim ele continua executando o else mesmo a porta estando em uso.. estranho pois é o mesmo script para o mysql e funciona perfeitamente.

mais alguma ideia?


4. Re: shell script verifica porta em uso e executa ação

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/12/2016 - 22:00h

TKratos escreveu:

laika escreveu:

Dando uma olhada rapida


if [ $ntstat =~ $port ]; then


Não pode usar =~ em [ ], use [[ ]], que é especifico do bash, e #!/bin/sh chama dash no debian

no inicio
 #!/bin/bash  

 #!/usr/bin/env bash  


e use
 [[ "$ntstat" =~ "$port" ]]; then  




Não pude testar porque não tenho apache, mas olhando já vi isso.






Ok, fiz as alterações mais ainda sim ele continua executando o else mesmo a porta estando em uso.. estranho pois é o mesmo script para o mysql e funciona perfeitamente.
mais alguma ideia?


Boa noite.
Além das alterações propostas pela Laika, faça:
ntstat=$(netstat -ap tcp | grep -o '8081')
port="8081*"

marcelo oliver




5. Re: shell script verifica porta em uso e executa ação

Thiago Brunet
TKratos

(usa Ubuntu)

Enviado em 14/12/2016 - 11:33h

Boa noite.
Além das alterações propostas pela Laika, faça:
ntstat=$(netstat -ap tcp | grep -o '8081')
port="8081*"

marcelo oliver

[/quote]

Fiz mas ainda sim continua caindo no else.. e iniciando o apache toda a vez... o que acho estranho é que o mesmo script para o mysql funciona perfeitamente... pode ser algo envolvido com o serviço do apache ou a porta relacionada a ele?



6. Consegui

Thiago Brunet
TKratos

(usa Ubuntu)

Enviado em 14/12/2016 - 14:15h

Mudei um pouco e desta forma eu consegui fazer funcionar na porta 8080, na porta 80 que é a padrão do apache eu não consegui.

#!/bin/bash
#!/usr/bin/env bash

netstat -ntpla tcp | grep ${1:-8080} -q ;

if [ $? -eq 1 ];
then
echo Iniciando Apache...
/etc/init.d/apache2 start;
else
echo Parando Apache...
/etc/init.d/apache2 stop;

fi


7. Re: shell script verifica porta em uso e executa ação

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/12/2016 - 20:42h

TKratos escreveu:

Mudei um pouco e desta forma eu consegui fazer funcionar na porta 8080, na porta 80 que é a padrão do apache eu não consegui.

#!/bin/bash
#!/usr/bin/env bash

netstat -ntpla tcp | grep ${1:-8080} -q ;

if [ $? -eq 1 ];
then
echo Iniciando Apache...
/etc/init.d/apache2 start;
else
echo Parando Apache...
/etc/init.d/apache2 stop;

fi
Utillize o "if grep"
#!/bin/bash
#!/usr/bin/env bash

netstat -ntpla tcp | if grep ${1:-8080} -q;then
echo Iniciando Apache...
/etc/init.d/apache2 start;
else
echo Parando Apache...
/etc/init.d/apache2 stop;

fi[/quote]

marcelo oliver









  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts