Não é possível reiniciar o mysql a partir do cron job

1

Eu tenho um problema em que o MySQL (rodando no Ubuntu 12.04 com todas as últimas atualizações) morre depois de alguns dias, então coloque este script em um cron job que roda como root a cada 60 segundos.

Tudo funciona, exceto que o serviço mysql não é reiniciado, eu tentei usar "service mysql restart" e "/ usr / bin / mysqld" e eles não funcionam também.

Estou usando o caminho completo para reiniciar o comando, então não acredito que seja um problema. Agora a única coisa que funciona é substituir o comando restart por um "reboot" e isso é muito feio e eu quero evitá-lo.

#!/bin/bash
#Check if MySQL is up, if not then start it
# mysql root/admin username
MUSER="root"
# mysql admin/root password
MPASS="REMOVED"
# mysql server hostname
MHOST="localhost"
#Shell script to start MySQL server i.e. path to MySQL daemon start/stop script.
# Debain uses following script, need to setup this according to your UNIX/Linux/BSD OS.
MSTART="/etc/init.d/mysql restart"
# Email ID to send notification
EMAILID="[email protected]"
# path mysqladmin
MADMIN="$(which mysqladmin)"

MAILMESSAGE="/tmp/mysql.fail.$$"

# see if MySQL server is alive or not

$MADMIN -h $MHOST -u $MUSER -p${MPASS} ping 2>/dev/null 1>/dev/null
if [ $? -ne 0 ]; then
        echo "" >$MAILMESSAGE
        echo "ALERT: MySQL Server is not responding to ping">>$MAILMESSAGE
        echo "Hostname: $(hostname)" >>$MAILMESSAGE
        echo "System Time: $(date)" >>$MAILMESSAGE
        # try to start mysql
        $MSTART>/dev/null
        # see if it is started or not
        o=$(ps cax | grep -c ' mysqld$')
        if [ $o -eq 1 ]; then
                sMess="MySQL server successfully restarted"
        else
                sMess="MySQL server FAILED to restart"
        fi
        # Email status too
        echo "Current Status: $sMess" >>$MAILMESSAGE
        echo "" >>$MAILMESSAGE
        echo "*** This email generated by $(basename $0) shell script ***" >>$MAILMESSAGE
        echo "*** Please don't reply this email, this is just notification email ***" >>$MAILMESSAGE
        # send email
        sendemail -o message-content-type=text -f [email protected] -t $EMAILID -u MySQL GURU ALARM -m < $MAILMESSAGE
else # MySQL is running :) and do nothing
        :
fi
# remove file
rm -f $MAILMESSAGE
    
por Tyler 25.06.2012 / 01:25

1 resposta

4

Sem ver o log de erros de inicialização, seria quase impossível diagnosticar.

Se eu tivesse que arriscar um palpite, parece ser ulimit em falta, o processo provavelmente é incapaz de alocar a memória que precisa de um cron, mas não é limitado quando executado via shell interativo. O log do MySQL confirmaria isso, embora de forma não descritiva.

Além disso, não reinvente a roda com scripts de meia barra, apenas use um aplicativo de monitoramento reconhecido como monit

    
por 25.06.2012 / 01:32