Acho que você está entendendo mal o uso da porta 80. Apenas um daemon está escutando na porta 80. Ele encaminha as solicitações de entrada para os daemons de trabalho do Apache. Eu simplesmente executaria o script de reinicialização se o comando curl
não retornasse com um status HTTP 200.
O script de serviço stop / start já deve ter provisões para lidar com o Apache que está ativo e não está disposto a desistir.
Se você achar isso mesmo depois de funcionar assim:
$ /etc/init.d/httpd stop
$ pgrep httpd
... returns process ID's...
Depois, você pode querer mudar um pouco sua abordagem e fazer isso:
$ /etc/init.d/httpd stop
$ pkill httpd
$ /etc/init.d/httpd start
Mas como eu disse. Você realmente não deveria ter que fazer nada disso. O script de serviço /etc/init.d/httpd
deve ser suficientemente robusto para lidar adequadamente com essas situações.
Script modificado
Eu modifico o que você tem da seguinte maneira, mas, caso contrário, não há problema em usar como está, IMO.
#!/bin/bash
response=$(curl --write-out %{http_code} --connect-timeout 5 \
--silent --output /dev/null http://www.mydomain.com/some-empty-page)
if [ $response -eq 200 ]; then
echo "All's well"
else
/etc/init.d/httpd restart
echo "wrong $(date)" >> /home/myspace/restart_log.txt
fi
Se você quiser o recurso de eliminação, altere a cláusula else:
else
/etc/init.d/httpd stop
pkill httpd
/etc/init.d/httpd start
echo "wrong $(date)" >> /home/myspace/restart_log.txt
fi
Dependendo da gravidade da reinicialização que você deseja executar, você pode expandir o pkill
para obter sinais de eliminação mais severos (por exemplo, SIGKILL aka. -9
), mas eu começaria com o primeiro. Se você tiver problemas com o Apache, adicione a cláusula else a seguir. Se isso ainda deixar pendurar o Apache, use o SIGKILL.