Назад | Перейти на главную страницу

Не удается перезапустить mysql из задания cron

У меня проблема, когда MySQL (работающий на Ubuntu 12.04 со всеми последними обновлениями) умирает через несколько дней, поэтому поместите этот скрипт в задание cron, которое запускается с правами root каждые 60 секунд.

Все работает, за исключением того, что служба mysql не перезапускается, я пробовал использовать «перезапуск службы mysql» и «/ usr / bin / mysqld», но они тоже не работают.

Я использую полный путь для перезапуска команды, поэтому не думаю, что это проблема. Сейчас единственное, что работает, - это замена команды перезапуска на «перезагрузку», и это очень некрасиво, и я хочу избежать этого.

#!/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="some@email.net"
# 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 some@email.net -t $EMAILID -u MySQL GURU ALARM -m < $MAILMESSAGE
else # MySQL is running :) and do nothing
        :
fi
# remove file
rm -f $MAILMESSAGE

Без просмотра журнала ошибок запуска диагностировать было бы практически невозможно.

Если бы я рискнул предположить, это звучало бы, вероятно, ulimit по вине процесс, вероятно, не может выделить необходимую ему память из cron, но не ограничен при запуске через интерактивную оболочку. Журнал MySQL подтвердит это, хотя и не в дескрипционной форме.

Кроме того, не изобретайте колесо с наполовину взведенными скриптами, просто используйте признанное приложение для мониторинга, например monit