Problema de script de shell: script de tarefa cron para Reiniciar o servidor MySQL quando ele é interrompido acidentalmente

11

Eu tenho este script, estou usando-o para configurar o trabalho CRON para executar este script, para que ele possa verificar se o serviço MySQL está sendo executado; se não, então reinicie o serviço MySQL:

#!/bin/bash
service mysql status| grep 'mysql start/running' > /dev/null 2>&1
if [ $? != 0 ]
then
    sudo service mysql restart
fi

Eu tenho trabalho de configuração do cron.

sudo crontab -e

e, em seguida, adicionado,

*/1 * * * * /home/ubuntu/mysql-check.sh

O problema é que ele reinicia o MySQL em todas as execuções de tarefas agendadas. mesmo que o servidor esteja rodando, reinicie o serviço MySQL o que é correção no script para fazer isso.

    
por Straw Hat 21.04.2014 / 07:53

3 respostas

13

Eu suspeito que você tenha configurado o cron job para executar este script no seu arquivo crontab, e não no arquivo crontab raiz. Isso não está correto porque, se você não executar service mysql status como root, o serviço mysql não será reconhecido.

Então, modifique o script da seguinte forma:

#!/bin/bash
if [[ ! "$(/usr/sbin/service mysql status)" =~ "start/running" ]]
then
    /usr/sbin/service mysql start
fi

Certifique-se de que é executável:

chmod +x /path/to/script

Em seguida, adicione uma nova entrada no crontab raiz da seguinte forma:

  • Edite o arquivo root crontab usando:

    sudo crontab -e
    
  • Adicione a seguinte linha ao arquivo:

    */1 * * * * /path/to/script
    
  • Nota: Eu defini o cron job para cada minuto, mas você pode alterar como quiser ou como achar melhor. Veja link neste sentido.

por Radu Rădeanu 21.04.2014 / 09:40
3

A resposta de Radu quase funcionou. Eu tive que definir o caminho para que funcionasse:

#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin
if [[ ! "$(service mysql status)" =~ "start/running" ]]
then
    service mysql start
fi
    
por Donkzilla 22.08.2014 / 18:14
1

A resposta de Radu funciona - mas este script também funciona

#!/bin/bash
if [[ $(pgrep mysql | wc -l) = 0 ]];
then
    sudo service mysql start;
fi
    
por JxAxMxIxN 02.12.2015 / 05:11