Tengo este script, lo estoy usando para configurar el trabajo CRON para ejecutar este script, para que pueda verificar si el servicio MySQL se está ejecutando; de lo contrario, reinicia el servicio MySQL:
#!/bin/bash
service mysql status| grep 'mysql start/running' > /dev/null 2>&1
if [ $? != 0 ]
then
sudo service mysql restart
fi
He configurado el trabajo cron como.
sudo crontab -e
y luego agregó
*/1 * * * * /home/ubuntu/mysql-check.sh
El problema es que reinicia MySQL en cada ejecución de trabajo cron ... incluso si el servidor se está ejecutando, reinicia el servicio MySQL, ¿qué es la corrección en el script para hacerlo?

[ ... ]otest <TEST>en Bash. Son sintaxis obsoleta . Usar en su[[ ... ]]lugar. Sólo utilizar[ ... ]y / otest <TEST>cuando[[ ... ]]es no disponible.if ! (service mysql status | grep 'mysql start/running' &>/dev/null); then sudo service mysql restart; filo que esto hace es iniciar una subshell, en la queservice mysql status | grep 'mysql start/running' &> /dev/nullse ejecuta, el estado de retorno (salida) de dicha subshell luego se pasa a la instrucción if, que luego comprueba si no es cero, y si es no distinto de cero, entonces se ejecuta elthenbloque.Respuestas:
Sospecho que configuró el trabajo cron para ejecutar este script en su archivo crontab, y no en el archivo raíz crontab. Esto no es correcto porque si no se ejecuta
service mysql statuscomo root,mysqlno se reconocerá el servicio.Entonces, modifique el script de la siguiente manera:
Asegúrese de que sea ejecutable:
Luego agregue una nueva entrada en el crontab raíz de la siguiente manera:
Edite el archivo crontab raíz usando:
Y agregue la siguiente línea al archivo:
Nota: He configurado el trabajo cron para cada minuto, pero puede cambiarlo como lo desee o como considere mejor. Ver http://en.wikipedia.org/wiki/Cron en este sentido.
fuente
./mysql-check.sh: line 2: [: =~: binary operator expectederror en el guión anterior!si realmente tiene la intención de reiniciar el servicio mysql en caso de fallaLa respuesta de Radu casi funcionó. Tuve que establecer el camino para que funcione:
fuente
PATHen el archivo crontab. De todos modos, en su caso debe usarPATH=/usr/sbin:$PATHo usar la ruta completaservicemientras edito mi respuesta.La respuesta de Radu funciona, pero este script también funciona
fuente
pgrep mysqly conseguí0que mysql fuera detenido y2que corriera. Por lo tanto, establecí la condición comoif [[ $(pgrep mysql | wc -l) = 0 ]];y funcionó para mí./bin/bash(no funciona sin bash).*/1 * * * * /bin/bash /root/mysql-check.sh