J'ai ce script, je l'utilise pour configurer le travail CRON pour exécuter ce script, 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
puis ajouté,
*/1 * * * * /home/ubuntu/mysql-check.sh
Le problème est qu'il redémarre MySQL à chaque exécution de tâche cron .. même si le serveur est en cours d'exécution, redémarrez le service MySQL quelle correction dans le script pour faire cela.
[ ... ]
outest <TEST>
dans Bash. Ils sont obsolètes . Utilisez[[ ... ]]
plutôt. Utiliser uniquement[ ... ]
et / outest <TEST>
quand[[ ... ]]
n'est pas disponible.if ! (service mysql status | grep 'mysql start/running' &>/dev/null); then sudo service mysql restart; fi
ce que cela fait, c'est qu'il démarre un sous-shell, dans lequelservice mysql status | grep 'mysql start/running' &> /dev/null
est exécuté, le statut de retour (sortie) dudit sous-shell est ensuite transmis à l'instruction if, qui vérifie ensuite si elle n'est pas nulle, et s'il n'est pas différent de zéro, il exécute lethen
bloc.Réponses:
Je soupçonne 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 ne vous exécutez pas en
service mysql status
tant que root, lemysql
service ne sera pas reconnu.Modifiez donc le script comme suit:
Assurez-vous que c'est exécutable:
Ajoutez ensuite une nouvelle entrée dans la racine crontab comme suit:
Modifiez le fichier crontab racine en utilisant:
Et ajoutez la ligne suivante au fichier:
Remarque: J'ai défini le travail cron pour chaque minute, mais vous pouvez changer comme vous le souhaitez ou comme vous le pensez. Voir http://en.wikipedia.org/wiki/Cron dans ce sens.
la source
./mysql-check.sh: line 2: [: =~: binary operator expected
erreur dans le script ci-dessus!
si vous avez réellement l'intention de redémarrer le service mysql en cas de panneLa réponse de Radu a presque fonctionné. J'ai dû définir le chemin pour le faire fonctionner:
la source
PATH
dans le fichier crontab. Quoi qu'il en soit, dans votre cas, vous devez utiliserPATH=/usr/sbin:$PATH
ou utiliser le chemin complet pourservice
comme j'ai édité ma réponse.La réponse de Radu fonctionne - mais ce script fonctionne également
la source
pgrep mysql
et j'ai obtenu0
que mysql soit arrêté et que je2
cours. Pour cela, j'ai mis la conditionif [[ $(pgrep mysql | wc -l) = 0 ]];
et cela a fonctionné pour moi./bin/bash
(il ne fonctionne pas sans bash).*/1 * * * * /bin/bash /root/mysql-check.sh