Eu tenho esse script, estou usando-o para configurar o trabalho CRON para executar esse script, para que ele possa verificar se o serviço MySQL está em execução; Caso contrário, 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 configurei o cron job como.
sudo crontab -e
e depois adicionado,
*/1 * * * * /home/ubuntu/mysql-check.sh
O problema é que ele reinicia o MySQL em todas as execuções de tarefas do cron. Mesmo se o servidor estiver em execução, reinicie o serviço MySQL, o que é a correção no script para fazer isso.
[ ... ]
outest <TEST>
no Bash. Eles são sintaxe obsoleta . Use em[[ ... ]]
vez disso. Use apenas[ ... ]
e / outest <TEST>
quando não[[ ... ]]
estiver disponível.if ! (service mysql status | grep 'mysql start/running' &>/dev/null); then sudo service mysql restart; fi
que isso faz é iniciar um subshell, no qualservice mysql status | grep 'mysql start/running' &> /dev/null
é executado, o status de retorno (saída) do subshell é passado para a instrução if, que verifica se é diferente de zero, e se é não diferente de zero, então ele corre othen
bloco.Respostas:
Eu suspeito que você configurou o trabalho cron para executar este script no seu arquivo crontab, e não no arquivo raiz crontab. Isso não está correto, porque se você não executar
service mysql status
como root, omysql
serviço não será reconhecido.Portanto, modifique o script da seguinte maneira:
Certifique-se de que seja executável:
Em seguida, adicione uma nova entrada na raiz crontab da seguinte maneira:
Edite o arquivo raiz crontab usando:
E adicione a seguinte linha ao arquivo:
Nota: Eu configurei o trabalho cron para cada minuto, mas você pode mudar conforme desejar ou como achar melhor. Veja http://en.wikipedia.org/wiki/Cron neste sentido.
fonte
./mysql-check.sh: line 2: [: =~: binary operator expected
erro no script acima!
se você realmente pretende reiniciar o serviço mysql no acidenteA resposta de Radu quase funcionou. Eu tive que definir o caminho para fazê-lo funcionar:
fonte
PATH
no arquivo crontab. De qualquer forma, no seu caso, você precisa usarPATH=/usr/sbin:$PATH
ou usar o caminho completo paraservice
enquanto editei minha resposta.A resposta de Radu funciona - mas esse script também funciona
fonte
pgrep mysql
e cheguei0
para o mysql estar parado e2
em execução. Por isso, defino a condiçãoif [[ $(pgrep mysql | wc -l) = 0 ]];
e ela funcionou para mim./bin/bash
(ele não funciona sem o bash).*/1 * * * * /bin/bash /root/mysql-check.sh