2013-10-07 2 views
0

Я ищу некоторый рабочий код оболочки для автоматического перезапуска mysql-серверов, если он не работает. вот некоторые коды, которые я разыгрываю в поиске Google, прослушивают порт 3306, если он не работает, перезапустите. если не удается перезапустить, перезагрузите сервер.Синтаксическая ошибка рядом с неожиданным токеном `done 'в коде bash

Может ли этот код работать? Если нет, то кто-нибудь может поделиться мне рабочим кодом? Если да, я встретил syntax error near unexpected token done 'in bash code`, как его решить? Благодарю.

PORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'` 
MYSQLIP=`ifconfig eth0|awk '/inet/{print $2}'|cut -c 6-` 
while [ `whoami` == "root" ] 
do 
    if [ "$PORT" == "3306" ];then 
    echo "mysql is running......" 
    else 
    service mysql restart 
     if [ "$PORT" == "3306" ];then 
     else 
      reboot 
     fi 
    fi 
break 
done 

Изменить код:

PORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'` 
MYSQLIP=`ifconfig eth0|awk '/inet/{print $2}'|cut -c 6-` 
while [ `whoami` == "root" ] 
do 
    if [ "$PORT" == "3306" ];then 
    echo "mysql is running......" 
    else 
    service mysql restart 
     if [ "$PORT" == "3306" ];then 
     : 
     else 
      reboot 
     fi 
    fi 
break 
done 
+1

Я думаю, что перезагрузка коробки, если mysql не запускается, - очень плохая идея. Например, если в my.cnf есть какая-либо опечатка, из-за которой mysql не запускается, у вас теперь есть перезагрузка в цикле. –

+0

@Marc Alff, если конфигурация my.cnf хорошо, мой sys запускался несколько месяцев, но иногда mysql разбился, не может перезагружаться в ssh part, только перезагрузка может восстановить систему. так что это еще плохая идея? невозможно проверить мой сайт за 24 часа, спасибо за обсуждение. –

+0

Просто указывая возможные риски. Вы также можете использовать mysqld_safe, см. Http://dev.mysql.com/doc/refman/5.5/en/mysqld-safe.html –

ответ

1

Ваше состояние тест должен выполнить какой-то код, если оно истинно.

Похоже, вы хотите reboot, если "$PORT" не "3306".

При проверке состояния вы должны использовать только break, иначе цикл будет выполняться только один раз.

Переменная PORT не будет обновляться, если вы не вызываете код, который устанавливает его снова после его обновления.

Кроме того, при использовании awk вам не нужно использовать grep.

#!/bin/bash 

callport() 
{ 
    PORT=`netstat -na|awk -F[:" "]+ '/LISTEN/ && /3306/ {print $5}'` 
} 
MYSQLIP=`ifconfig eth0|awk '/inet/{print $2}'|cut -c 6-` 
while [ `whoami` == "root" ] 
do 
    callport 
    if [ "$PORT" == "3306" ];then 
    echo "mysql is running......" 
    break 
    else 
    service mysql restart 
    callport 
     if [ "$PORT" != "3306" ];then 
      reboot 
     fi 
    fi 
done 
+0

привет, перезагрузка - плохая идея? строка 1: синтаксическая ошибка возле неожиданного токена ' строка 1:' callport(), я редактирую в Dreamweaver. Благодарю. –

+0

У вас есть '#!/Bin/bash' shebang в начале скрипта? –

+0

Я не уверен, что вы пытаетесь сделать с этим скриптом, но это не похоже на то, что 'reboot' решит все, что перезапуск службы mysql не будет. –

Смежные вопросы