One-Liner necessário: Pare o httpd se já estiver rodando e inicie o httpd se não estiver rodando

1

Como parte de um script de provisionamento para o CentOS 7, eu preciso ter um one-liner que execute o seguinte. Infelizmente, não tenho ideia de como conseguir isso.

  • Se o httpd estiver em execução, pare-o
  • Se o httpd não estiver em execução, verifique se o httpd está instalado em todas as & inicie-a
  • idealmente, o resultado é registrado em / log / httpd / AND / & nome do host / log / httpd /

Alguém pode ajudar?

    
por frank 15.04.2015 / 14:12

2 respostas

3

No CentOS7, você tem o systemctl que basicamente fará isso para você. Se o Apache é instalado através dos pacotes padrão, isso deve funcionar para você pronto para uso:

echo -n $(date +"%s %F %T"): \
if systemctl is-active httpd; then \
    systemctl stop httpd && echo "httpd stopped"; \
elif systemctl enable httpd; then \
    systemctl start httpd && echo "httpd started"; \
else \
    echo "httpd not installed"; false;\
fi 2>&1 || echo "Failure: $?" | \
 tee -a /var/log/httpd/status.log /some/other/location/log/httpd/status.log

Eu o dividi em várias linhas para maior clareza. Para reduzi-lo a uma linha, remova as linhas e as novas linhas. Você pode adicionar mais verbosidade ao registro.

    
por 15.04.2015 / 15:49
1

Aqui está o meu onliner:

( if service httpd status; then echo 'stop'; service httpd stop; else echo 'check installed'; if ! rpm -qa | grep -q '^httpd-'; then echo 'install'; yum -y install httpd; fi; echo 'start'; service httpd start; fi ) &> /tmp/temp.log; cat /tmp/temp.log >> /log/httpd/some.log; cat /tmp/temp.log >> /&hostname/log/httpd/another.log; rm /tmp/temp.log
    
por 15.04.2015 / 15:28