Estou trabalhando em um pequeno painel de controle para o meu servidor. Eu preciso de um comando que diga se httpd
está sendo executado ou parado.
Provavelmente também estará usando o mesmo código para outros serviços.
A maioria das pessoas executa o httpd (Apache, Nginx, etc) através de um sistema init. Esse é quase certamente o caso se você instalou a partir de um pacote. Quase todos esses sistemas init têm um método que funciona se estiver em execução. No meu caso, estou usando o nginx, que envia um script init no estilo SysV e aceita um status
argumento, assim:
$ /etc/init.d/nginx status
* nginx is running
Obviamente, se você estiver executando um sistema httpd, script ou init diferente, terá uma sintaxe um pouco diferente, mas, a menos que esteja iniciando o httpd manualmente (o que parece ser a pior idéia do mundo), provavelmente usando um bom script de inicialização gerenciado que permitirá consultar o status.
A resposta do slm tem mais informações sobre esse tipo de consulta init, mas o problema de confiar nisso é que realmente apenas informa se um processo ainda está em execução. O processo principal do seu httpd pode estar em execução, mas de alguma forma está travado. Faz muito sentido pular testes de inicialização simples e passar para testes comportamentais.
Uma coisa que sabemos sobre os httpds é que eles ouvem. Geralmente na porta *:80
, mas se a sua não, você pode adaptar o código a seguir. Aqui estou apenas awk
exibindo a saída netstat
para ver se está ouvindo na porta correta.
$ sudo netstat -ntlp | awk '$4=="0.0.0.0:80"'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2079/nginx
Também podemos verificar qual processo está sendo executado também para garantir que o httpd correto esteja sendo executado. Poderíamos fazer todo tipo de verificação. Depende do quão paranóico você quer ser :)
Mas mesmo isso é apenas um reflexo de um httpd. Quer realmente testá-lo? Bem, vamos testar lo.
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Estou apenas olhando para o código de resposta (200 significa "A-Okay!"), Mas novamente, poderíamos cavar e realmente testar a saída para garantir que ela esteja sendo gerada corretamente.
Mas mesmo isso não é tão completo. Você está verificandolocalhost
e está relatando 200, nada de errado? E se os castores mastigassem o cabo de rede que fornece o httpd (mas não o resto do sistema)? Então o que?! Você está relatando tempo de atividade quando está realmente inativo. Poucas coisas parecem mais não profissionais do que dados de status incorretos.
Então, vamos conversar com um servidor externo (idealmente em uma conexão completamente diferente, em outra galáxia muito, muito distante) e pedir para ele consultar nosso servidor:
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
A essa altura, todos os problemas relatados são problemas no aplicativo (que podem ter seu próprio tratamento de erros e relatórios, ou estão no final do cliente).
Uma combinação desses testes pode ajudar a identificar onde está o problema.
Você pode usar o comando services universalmente na maioria das distribuições Linux.
Exemplo
Este mesmo comando pode ser usado para todos os serviços executados individualmente ou para encontrar o status de todos os serviços.
Os vários métodos no SysVinit, Systemd e Upstart para listar serviços
Se você estiver usando uma das estruturas de gerenciamento de serviços mais típicas, poderá usar os seguintes métodos para listar os serviços em cada uma.
SysVinit
Systemd
Upstart
Referências
fonte