Respostas:
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.
$ service <service> status
$ service httpd status
httpd (pid 23569) is running...
Este mesmo comando pode ser usado para todos os serviços executados individualmente ou para encontrar o status de todos os serviços.
$ service --status-all
python is stopped
automount (pid 22457) is running...
Avahi daemon is not running
Avahi DNS daemon is not running
crond (pid 23577) is running...
gpm is stopped
hald is stopped
httpd (pid 23569) is running...
...
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
$ ls -l /etc/init.d/ | head -10
total 220
-rwxr-xr-x 1 root root 1422 Jan 13 2009 ajaxterm
-rwxr-xr-x 1 root root 3052 Apr 20 2012 autofs
-rwxr-xr-x 1 root root 1877 Apr 13 2011 avahi-daemon
-rwxr-xr-x 1 root root 1824 Apr 13 2011 avahi-dnsconfd
-rwxr-xr-x 1 root root 1926 Feb 22 2012 crond
-rwxr-xr-x 1 root root 14291 Dec 19 2011 functions
-rwxr-xr-x 1 root root 1778 Jan 6 2007 gpm
-rwxr-xr-x 1 root root 1586 Mar 5 2011 haldaemon
-rwxr-xr-x 1 root root 5742 Dec 19 2011 halt
Systemd
$ systemctl list-unit-files --type=service | head -10
UNIT FILE STATE
abrt-ccpp.service enabled
abrt-oops.service enabled
abrt-pstoreoops.service disabled
abrt-vmcore.service enabled
abrt-xorg.service enabled
abrtd.service enabled
accounts-daemon.service enabled
alsa-restore.service static
alsa-state.service static
Upstart
$ initctl list | head -10
avahi-daemon start/running, process 1090
mountall-net stop/waiting
nmbd start/running, process 2045
passwd stop/waiting
rc stop/waiting
rsyslog start/running, process 1088
tty4 start/running, process 1211
udev start/running, process 483
upstart-udev-bridge start/running, process 480
ureadahead-other stop/waiting