0

如果它不工作,我正在寻找一些用于自动重启 mysql 服务器的工作 shell 代码。这是我在谷歌搜索中找到的一些代码,听 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

如果为真,您的条件测试必须执行某种代码。

看起来你想要rebootif "$PORT"is not "3306"

你应该只break在测试条件时使用,否则循环只会执行一次。

除非您在需要更新后再次调用设置它的代码,否则该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 回答