Verifique os serviços em execução no servidor e reinicie-os se eles pararem?

1

Eu estou tentando escrever um script python que mostra os serviços que estão sendo executados no meu servidor.

A coisa é que o mongodb continua indo para o servidor e toda vez que isso acontece, eu tenho que escrever manualmente o comando para iniciá-lo.

O que eu queria fazer era automatizar esse trabalho para alguns serviços se eles caíssem.

Atualmente, escrevi este link

Eu conheço seus caras realmente básicos. Tem milhas a percorrer:)

Agora, como faço para iniciar os serviços mongodb e apache por meio desse script? Qualquer sugestão seria realmente útil.

    
por Tasdik Rahman 03.08.2015 / 14:51

3 respostas

1

I am trying to write a python script which shows me the services which are running on my server.

Não faça isso. Isso é exatamente para o que é um gerenciador de processos como upstart ou systemd . Usando systemd , um arquivo de unidade simples para o mongo pode ser parecido com:

[Unit]
Description=High-performance, schema-free document-oriented database
After=syslog.target network.target

[Service]
Type=forking
User=mongodb
EnvironmentFile=/etc/sysconfig/mongod
PIDFile=${PIDFILE-/var/run/mongodb/mongod.pid}
ExecStart=/usr/bin/mongod $OPTIONS run
PrivateTmp=true
LimitNOFILE=64000
TimeoutStartSec=180

[Install]
WantedBy=multi-user.target

Se você quiser que isso seja reiniciado automaticamente quando falhar, você poderá adicionar à seção [Service] :

Restart=on-failure

Se você tiver o azar de trabalhar em um sistema sem um sistema moderno gerenciador de processos, você pode usar uma ferramenta como o supervisor para obter mesmo efeito.

Mas, de verdade, se o seu aplicativo continuar falhando, você estará muito melhor tentando descobrir a origem do problema. O Mongodb registra informações para onde logpath em seus /etc/mongod.conf pontos de arquivos ( /var/log/mongodb/mongodb.log em meu sistema) e esse é provavelmente o primeiro local a procurar por problemas.

Outras aplicações fornecem informações de diagnóstico semelhantes que podem ajudar a encontrar a causa raiz das falhas.

    
por 06.08.2015 / 16:59
0

Maneira rápida e suja:

Você pode colocar um script em um cron para rodar a cada X minutos e reiniciar o mongodb se ele não estiver rodando.

A principal coisa sobre este script simples abaixo, ele se baseia no código de resposta do grep para determinar se ele deve ser reiniciado ou não. No entanto, você precisa daquele segundo grep porque o primeiro grep sempre retornará com sucesso, devido ao próprio comando grep que aparece na lista de processos. Então, se você disser "Grep for THIS STRING" na saída de ps, o grep primeiro sempre encontrará isso, porque sempre encontrará o processo do comando "Grep for THIS STRING".

Certamente existem maneiras melhores e mais bonitas de fazer isso, mas a lógica abaixo funciona. Neste final do dia, pode ser feio, mas funciona período. Eu peguei emprestado de um script simples que eu tinha que escrever para garantir que uma sincronização extremamente lenta de outro continente continuasse funcionando, mesmo que a rede fosse extremamente fraca e deixasse a conexão cair regularmente.

#!/bin/bash

# DATE var only included in case you want some rudimentary logging on when mongo drops/restarts. You will have to add that yourself.

DATE='date +%m-%d-%H:%M:%S'

ps -ef | grep 'unique first part of unique string that you see from ps which indicates mongo is running' | grep 'second part of unique string that you see from ps when mongo is running'; 

if [ $? == "1" ]; 
    then 

command to restart mongodb; can also include other commands to make sure it runs correctly like removing stale locks etc; 

fi
    
por 03.08.2015 / 17:00
-2

Ele é executado como root? Nesse caso, você pode fazer service xxxx start em seu script, em que xxxx é mongodb ou apache .

    
por 03.08.2015 / 15:04