广州鸿名健康科技有限公司


Oracle的标准系统服务脚本-for Linux

网络编程 Oracle的标准系统服务脚本-for Linux 06-22
一、所谓标准系统服务,应该是满足以下几条标准的后台运行程序。

  1) 用chkconfig --add来安装,用chkconfig --list检查状态。

  2) 用ntsysv来定制某个服务,是否伴随机器的启动而自动启动。

  3) 在图形模式下,可以用serviceconf来启动、停止、重启服务。

  4) 开机象系统服务那样显示starting,关机显示shutting down。

  二、下面是具体的dbora脚本,在Redhat 7.3上通过,本人已经验证了几十次,保证能运行。

  备注:启动lsnrctl的时候不用su- 而使用su,否则失败,并且要求使用Oracle用户本身的BASH_ENV.脚本开头的几个ORA_xxx参数都要依照实际情况写,否则会说找不到Oracle程序或者pid.DOS格式方便发文,拷下来后请大家用UltraEdit转为Unix格式。

  ------------------------------------------------------------------------

  代码:

  #!/bin/bash


  #


  # /etc/rc.d/init.d/dbora


  #


  # Starts the dbora daemon


  #


  # chkconfig: 345 94 6


  # description: Runs commands scheduled by the at command at the time 


  # specified when at was run, and runs batch commands when the load 


    # average is low enough.


  # processname: dbora


  #


  # copyright: Written by Wwashington AT smth bbs, free to distribute. 


  # You must keep everything in this file, including the copyright 


  # announcement. Study demo: atd & postgresql in /etc/rc.d/init.d


  


  # Source function library.


  INITD=/etc/rc.d/init.d


  . $INITD/functions


  


  # Source system profile.


  if [ -r /etc/profile ] ; then . /etc/profile ; fi


  


  ORA_SID=udb01


  ORA_USER=oracle


  ORA_BASE=/udb01/app/oracle


  ORA_HOME=/udb01/app/oracle/product/8.1.7


  BASH_ENV=$ORA_BASE/.bashrc


  


  test -x $ORA_HOME/bin/dbstart || exit 0


  RETVAL=0


  


  GREP_UNIX=`uname | awk '{if($1 ~ /(^SunOS|^HP-UX)/) print $1}'`


  if ! [ "$GREP_UNIX" = "" ]


  then


     GREP_FLAG=ef


  else


     GREP_FLAG=efw


  fi


  


  RUNLEVEL=`runlevel | awk '{ print $2 }'`


  # RUNLEVEL=6


  


  case "$RUNLEVEL" in


  3)


    SH_FLAG=1


    ;;


  4)


    SH_FLAG=1


    ;;


  5)


    SH_FLAG=1


    ;;


  *)


    SH_FLAG=0


    ;;


  esac


  


  # Below is a debug info to display Show Flag


  # echo RUNLEVEL=$RUNLEVEL , SH_FLAG=$SH_FLAG


  


  #


  # See how we were called.


  #


  


  prog="dbora"


  


  start() {


    # Check flag, if dbora already started, quit dbora


    if [ ! -f /var/lock/subsys/dbora ]; then


      echo -n $"Starting $prog: "


  


    # This is the background exec which can work under


    # both CLI (dbora) and GUI mode (serviceconf). We


    # must forward stderr to a file or null, otherwise


    # dbora won't start with a return code in GUI mode


    echo ""


    echo "[oralog] ----->"


    echo "Starting Oracle8i: "


    echo "-------------------------------------------------------------------------"


  # Please note that forward stderr(2) to /dev/null or &- means close stderr


    su - $ORA_USER -c "$ORA_HOME/bin/dbstart > /tmp/ORA-dbuplog" 2>/dev/null


  if [ $SH_FLAG -eq 1 ]; then


    cat /tmp/ORA-dbuplog


  fi


    echo


    echo "Starting TNS Listener:"


    echo "-------------------------------------------------------------------------"


    su $ORA_USER -c "$ORACLE_HOME/bin/lsnrctl start > /tmp/ORA-lsnrlog" 2>&-


  if [ $SH_FLAG -eq 1 ]; then


    cat /tmp/ORA-lsnrlog


  fi


  


    pid=`pidof -s ora_pmon_$ORA_SID`


    if [ "$pid" == "" ]; then


     RETVAL=1;


    else


     RETVAL=0;


    fi


  


    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dbora


    echo


    fi


    return $RETVAL


  }


  


  stop() {


    echo -n $"Stopping $prog: "


  


    # In order to use database local cmd to keep safe,


    # we use dbshut instead of simply kill ora_ proc.


    # When we reboot (runlevel = 0 or 6), no verbose.


     # Force remove /var/lock/subsys/dbora to activate


  if [ $SH_FLAG -eq 1 ]; then


    echo ""


    echo "[oralog] ----->"


    echo "Shutting down TNS Listener:"


    echo "-------------------------------------------------------------------------"


    su $ORA_USER -c "$ORACLE_HOME/bin/lsnrctl stop"


  else


    su $ORA_USER -c "$ORACLE_HOME/bin/lsnrctl stop > /dev/null"


  fi


  if [ $SH_FLAG -eq 1 ]; then


    echo


  fi


  if [ $SH_FLAG -eq 1 ]; then


    echo "Shutting down Oracle8i: "


    echo "-------------------------------------------------------------------------"


    su - $ORA_USER -c "$ORA_HOME/bin/dbshut"


  else


    su - $ORA_USER -c "$ORA_HOME/bin/dbshut > /dev/null"


  fi


  


    pid=`ps -$GREP_FLAG | grep -e ora_ -e lsnr | grep -v grep | awk '{ print $2 }'`


  # Show pids when shutdown failed, to see debug info


  # echo $pid


  


    if [ $pid ]; then


     failure ""


    else


     success ""


    fi


    echo ""


     rm -f /var/lock/subsys/dbora


      return $RETVAL


  }


  


  restart() {


  echo "Restarting Oracle8i and Listener: "


  echo "========================================================================="


    stop


    start


  }


  


  reload() {


    restart


  }


  


  status_ol() {


   echo "Checking Oracle8i and Listener: "


   echo "========================================================================="


   su - $ORA_USER -c "$ORA_HOME/bin/dbstat"


  }


  


  case "$1" in


  start)


    start


    ;;


  stop)


    stop


    ;;


  reload|restart)


    restart


    ;;


  condrestart)


    if [ -f /var/lock/subsys/dbora ]; then


      restart


    fi


    ;;


  status)


    status_ol


    ;;


  *)


    echo $"Usage: $0 {start|stop|restart|condrestart|status}"


    exit 1


  esac


  


  exit $?


  exit $RETVAL
  

  刚才的文件是 /etc/rc.d/init.d/dbora,现在补充一个,$ORACLE_HOME/bin/dbstat

  GREP_UNIX=`uname | awk '{if($1 ~ /(^SunOS|^HP-UX)/) print $1}'`


  


  if ! [ "$GREP_UNIX" = "" ]


  then


  GREP_FILE=/usr/xpg4/bin/grep


  GREP_FLAG=ef


  else


  GREP_FILE=/bin/grep


  GREP_FLAG=efw


  fi


  echo


  echo "# ps -$GREP_FLAG | $GREP_FILE -e ora_ -e lsnr| grep -v grep"


  echo


  ps -$GREP_FLAG | $GREP_FILE -e ora_ -e lsnr| grep -v grep


  echo


  
  

编辑:广州鸿名健康科技有限公司

标签:脚本,几个,格式,标准,程序