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.
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.
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
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