您的位置:首页 > 运维架构 > Shell

今天自己写的一个小shell - blog.lei - powered by phpwind.net

2007-11-06 18:00 603 查看
导读:
  #!/bin/bash
  # 20070427 make by lei
  case "$1" in
  "start")
  /etc/rc.d/init.d/mysqld strat ;;
  "stop")
  /etc/rc.d/init.d/mysqld stop ;;
  "restart")
  /etc/rc.d/init.d/mysqld restart ;;
  esac
  exit 0
  感觉还是语法不熟
  其实找到mysqld把它copy出来也是一样得,最终还得利用系统的那个mysqld文件进行操作
  其实原始脚本如下:
  #!/bin/bash
  #
  # mysqld This shell script takes care of starting and stopping
  # the MySQL subsystem (mysqld).
  #
  # chkconfig: - 64 36
  # description: MySQL database server.
  # processname: mysqld
  # config: /etc/my.cnf
  # pidfile: /var/run/mysqld/mysqld.pid
  # Source function library.
  . /etc/rc.d/init.d/functions
  # Source networking configuration.
  . /etc/sysconfig/network
  prog="MySQL"
  # extract value of a MySQL option from /etc/my.cnf
  # Usage: get_mysql_option FILE VARNAME DEFAULT
  # result is returned in $result
  # Ugly as this is, it knows nothing of option file sections ...
  get_mysql_option(){
  result=`sed -n "s/^[ /t]*$2[ /t]*=[ /t]*//p" "$1" 2>/dev/null | tail -n 1`
  if [ -z "$result" ]; then
  # not found, use default
  result="$3"
  else
  # found, still have to deal with quoting and end-of-line comments
  dequoted=`echo "$result" | sed "s/^'/([^']*/)'.*$//1/"`
  if [ x"$dequoted" != x"$result" ]; then
  result="$dequoted"
  else
  dequoted=`echo "$result" | sed 's/^"/([^"]*/)".*$//1/'`
  if [ x"$dequoted" != x"$result" ]; then
  result="$dequoted"
  else
  result=`echo "$result" | sed 's/^/([^ /t#]*/).*$//1/'`
  fi
  fi
  fi
  }
  get_mysql_option /etc/my.cnf datadir "/var/lib/mysql"
  datadir="$result"
  get_mysql_option /etc/my.cnf socket "$datadir/mysql.sock"
  socketfile="$result"
  get_mysql_option /etc/my.cnf log-error "/var/log/mysqld.log"
  errlogfile="$result"
  get_mysql_option /etc/my.cnf pid-file "/var/run/mysqld/mysqld.pid"
  mypidfile="$result"
  start(){
  touch "$errlogfile"
  chown mysql:mysql "$errlogfile"
  chmod 0640 "$errlogfile"
  [ -x /sbin/restorecon ] &&/sbin/restorecon "$errlogfile"
  if [ ! -d "$datadir/mysql" ] ;then
  action $"Initializing MySQL database: "/usr/bin/mysql_install_db
  ret=$?
  chown -R mysql:mysql "$datadir"
  if [ $ret -ne 0 ] ;then
  return $ret
  fi
  fi
  chown -R mysql:mysql "$datadir"
  chmod 0755 "$datadir"
  # The reason for explicitly specifying --pid-file is that there may
  # be no such entry in my.cnf, and the default behavior will be to not
  # create it at all. Likewise, we specify --log-error in case there
  # was not an entry in my.cnf.
  /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pid-file="$mypidfile" --log-error="$errlogfile" >/dev/null 2>&1 &
  ret=$?
  # Spin for a maximum of N seconds waiting for the server to come up.
  # Rather than assuming we know a valid username, accept an "access
  # denied" response as meaning the server is functioning.
  if [ $ret -eq 0 ]; then
  STARTTIMEOUT=30
  while [ $STARTTIMEOUT -gt 0 ]; do
  RESPONSE=`/usr/bin/mysqladmin -uUNKNOWN_MYSQL_USER ping 2>&1` &&break
  echo "$RESPONSE" | grep -q "Access denied for user" &&break
  sleep 1
  let STARTTIMEOUT=${STARTTIMEOUT}-1
  done
  if [ $STARTTIMEOUT -eq 0 ]; then
  echo "Timeout error occurred trying to start MySQL Daemon."
  action $"Starting $prog: "/bin/false
  else
  action $"Starting $prog: "/bin/true
  fi
  else
  action $"Starting $prog: "/bin/false
  fi
  [ $ret -eq 0 ] &&touch /var/lock/subsys/mysqld
  return $ret
  }
  stop(){
  MYSQLPID=`cat "$mypidfile" 2>/dev/null `
  if [ -n "$MYSQLPID" ]; then
  /bin/kill "$MYSQLPID" >/dev/null 2>&1
  ret=$?
  if [ $ret -eq 0 ]; then
  STOPTIMEOUT=60
  while [ $STOPTIMEOUT -gt 0 ]; do
  /bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break
  sleep 1
  let STOPTIMEOUT=${STOPTIMEOUT}-1
  done
  if [ $STOPTIMEOUT -eq 0 ]; then
  echo "Timeout error occurred trying to stop MySQL Daemon."
  ret=1
  action $"Stopping $prog: "/bin/false
  else
  rm -f /var/lock/subsys/mysqld
  rm -f "$socketfile"
  action $"Stopping $prog: "/bin/true
  fi
  else
  action $"Stopping $prog: "/bin/false
  fi
  else
  ret=1
  action $"Stopping $prog: "/bin/false
  fi
  return $ret
  }
  restart(){
  stop
  start
  }
  condrestart(){
  [ -e /var/lock/subsys/mysqld ] &&restart || :
  }
  # See how we were called.
  case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  status)
  status mysqld
  ;;
  restart)
  restart
  ;;
  condrestart)
  condrestart
  ;;
  *)
  echo $"Usage: $0 {start|stop|status|condrestart|restart}"
  exit 1
  esac
  exit $?

本文转自
http://218.85.131.36:8032/blog/article.php?itemid-83-type-blog.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐