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; fi
lo que esto hace es iniciar una subshell, en la queservice mysql status | grep 'mysql start/running' &> /dev/null
se 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 elthen
bloque.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 status
como root,mysql
no 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 expected
error 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
PATH
en el archivo crontab. De todos modos, en su caso debe usarPATH=/usr/sbin:$PATH
o usar la ruta completaservice
mientras edito mi respuesta.La respuesta de Radu funciona, pero este script también funciona
fuente
pgrep mysql
y conseguí0
que mysql fuera detenido y2
que 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