web-dev-qa-db-fra.com

Problème de script: script de travail cron pour redémarrer le serveur MySQL quand il s’arrête accidentellement

J'ai ce script, je l'utilise pour configurer le travail CRON afin de l'exécuter, afin qu'il puisse vérifier si le service MySQL est en cours d'exécution; sinon, il redémarre le service MySQL:

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

J'ai configuré le travail cron en tant que.

Sudo crontab -e

et ensuite ajouté,

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

Le problème est qu’il redémarre MySQL à chaque exécution du travail cron. Même si le serveur est en cours d’exécution, redémarrez le service MySQL avec la correction dans le script.

11
Straw Hat

Je suppose que vous avez configuré le travail cron pour exécuter ce script dans votre fichier crontab, et non dans le fichier racine crontab. Ce n'est pas correct car si vous n'exécutez pas service mysql status en tant que root, le service mysql ne sera pas reconnu.

Alors, modifiez le script comme suit:

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

Assurez-vous que c'est exécutable:

chmod +x /path/to/script

Ajoutez ensuite une nouvelle entrée dans la crontab racine comme suit:

  • Editez le fichier crontab racine en utilisant:

    Sudo crontab -e
    
  • Et ajoutez la ligne suivante au fichier:

    */1 * * * * /path/to/script
    
  • Remarque: j'ai défini la tâche cron pour chaque minute, mais vous pouvez changer à votre guise ou selon vos souhaits. Voir http://en.wikipedia.org/wiki/Cron dans ce sens.

16
Radu Rădeanu

La réponse de Radu a presque fonctionné. Je devais définir le chemin pour le faire fonctionner:

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

La réponse de Radu fonctionne - mais ce script fonctionne aussi

#!/bin/bash
if [[ $(pgrep mysql | wc -l) = 0 ]];
then
    Sudo service mysql start;
fi
2
JxAxMxIxN