0

動作していない場合、mysql サーバーを自動再起動するための動作するシェル コードを探しています。これは、Google検索で見つけたコードウィッチです。3306ポートをリッスンし、機能しない場合は再起動します。再起動できない場合は、サーバーを再起動します。

このコードは機能しますか? そうでない場合、誰かが私に作業コードを共有できますか? syntax error near unexpected tokenはいの場合、bash コードで 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

コードを変更します:

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
4

1 に答える 1

1

true の場合、条件テストは何らかのコードを実行する必要があります。

rebootそうでない場合"$PORT"は、したいようです"3306"

条件をテストする場合にのみ使用breakしてください。そうしないと、ループが 1 回だけ実行されます。

変数は、更新が必要になった後に再度設定するコードを呼び出さない限り、PORT更新されません。

grepまた、 を使用している場合は使用する必要はありませんawk

#!/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
于 2013-10-07T07:46:45.810 に答える