QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2709|回复: 1

不能自动停止的启动脚本。

[复制链接]
发表于 2008-1-11 12:37:48 | 显示全部楼层 |阅读模式
概况:

  1. Linux=2.6.15-3
  2. Shell=GNU Bash 3.0.x
  3. 准备让自行安装的PostgreSQL随系统运行级别的变化而启停,未果。
复制代码


问题:

  1. 以下脚本都能手工start和stop。
  2. 以下脚本都能用chkconfig添加进启动项,并在相应的/etc/rc.d/rcX.d目录中创建对应的SXXxxx和KXXxxx链接。
  3. 以下脚本在系统运行级别变化时只会start,不会stop。
  4. 有人能帮忙看看这些脚本有啥问题吗?或者给出一个可用的基本脚本?
复制代码


脚本“/etc/rc.d/init.d/tfw_pgsql”,修改自“/etc/rc.d/init.d/smb”:

  1. #!/bin/sh
  2. #
  3. # chkconfig: - 90 6
  4. # description: PostgreSQL control script.
  5. # !!! DO NOT MODIFY THE CONTENTS ABOVE BEFORE CAREFULLY THINKING! !!!

  6. echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  7. echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  8. echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  9. echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"

  10. # Source function library.
  11. if [ -f /etc/init.d/functions ] ; then
  12.   . /etc/init.d/functions
  13. elif [ -f /etc/rc.d/init.d/functions ] ; then
  14.   . /etc/rc.d/init.d/functions
  15. else
  16.   exit 0
  17. fi

  18. NAME=PostgreSQL
  19. USER=typhoon
  20. PG_HOME=/opt/prog/m/PostgreSQL.MagicLinux-2.0
  21. PGDATA=/opt/prog/m/PostgreSQL-Database
  22. PG_CTL=$PG_HOME/bin/pg_ctl
  23. DEAMON=$PG_HOME/bin/postmaster
  24. LOGFILE=$PGDATA/pg.log

  25. RETVAL=0

  26. start() {
  27.         echo ">>>        Starting $NAME..."
  28.         echo "        Version:        2008-01-10 14:45"
  29.         if(su - $USER -c "$PG_CTL -w -l $LOGFILE start -D $PGDATA")then
  30.                 RETVAL=0
  31.                 if($_function)then
  32.                         echo -n "<<<"
  33.                         echo_success
  34.                         echo ""
  35.                 else
  36.                         echo "<<<        [OK]"
  37.                 fi
  38.         else
  39.                 RETVAL=1
  40.                 if($_function)then
  41.                         echo -n "<<<"
  42.                         echo_failure
  43.                         echo ""
  44.                 else
  45.                         echo "<<<        [Failed]"
  46.                 fi
  47.         fi
  48.         echo $RETVAL
  49.         return $RETVAL
  50. }       

  51. stop() {
  52.         echo ">>>        Stopping $NAME..."
  53.         echo "        Version:        2008-01-10 14:45"
  54.         if(su - $USER -c "$PG_CTL stop -m fast")then
  55.                 RETVAL=0
  56.                 if($_function)then
  57.                         echo -n "<<<"
  58.                         echo_success
  59.                         echo ""
  60.                 else
  61.                         echo "<<<        [OK]"
  62.                 fi
  63.         else
  64.                 RETVAL=1
  65.                 if($_function)then
  66.                         echo -n "<<<"
  67.                         echo_failure
  68.                         echo ""
  69.                 else
  70.                         echo "<<<        [Failed]"
  71.                 fi
  72.         fi
  73.         echo $RETVAL
  74.         return $RETVAL
  75. }       

  76. restart() {
  77.         stop
  78.         start
  79. }       

  80. reload() {
  81.         echo ">>>        Reloading $NAME..."
  82.         echo "        Version:        2008-01-10 14:45"
  83.         if(su - $USER -c "$PG_CTL reload")then
  84.                 RETVAL=0
  85.                 if($_function)then
  86.                         echo -n "<<<"
  87.                         echo_success
  88.                         echo ""
  89.                 else
  90.                         echo "<<<        [OK]"
  91.                 fi
  92.         else
  93.                 RETVAL=1
  94.                 if($_function)then
  95.                         echo -n "<<<"
  96.                         echo_failure
  97.                         echo ""
  98.                 else
  99.                         echo "<<<        [Failed]"
  100.                 fi
  101.         fi
  102.         echo $RETVAL
  103.         return $RETVAL
  104. }       

  105. status() {
  106.         start
  107.         stop
  108. }       

  109. case "$1" in
  110.   start)
  111.           start
  112.         ;;
  113.   stop)
  114.           stop
  115.         ;;
  116.   restart)
  117.           restart
  118.         ;;
  119.   reload)
  120.           reload
  121.         ;;
  122.   status)
  123.           status
  124.         ;;
  125.   *)
  126.         echo $"Usage: $0 {start|stop|restart|reload|status}"
  127.         exit 1
  128. esac

  129. exit $?
复制代码


脚本“/etc/rc.d/init.d/smb_”,在上一脚本的基础上完全去除了数据库启停操作:

  1. #!/bin/sh
  2. #
  3. # chkconfig: - 91 35
  4. # description: Starts and stops the Samba smbd and nmbd daemons \
  5. #               used to provide SMB network services.
  6. #
  7. # pidfile: /var/run/samba/smbd.pid
  8. # pidfile: /var/run/samba/nmbd.pid
  9. # config:  /etc/samba/smb.conf


  10. # Source function library.
  11. if [ -f /etc/init.d/functions ] ; then
  12.   . /etc/init.d/functions
  13. elif [ -f /etc/rc.d/init.d/functions ] ; then
  14.   . /etc/rc.d/init.d/functions
  15. else
  16.   exit 0
  17. fi

  18. # Avoid using root's TMPDIR
  19. unset TMPDIR

  20. # Source networking configuration.
  21. . /etc/sysconfig/network

  22. if [ -f /etc/sysconfig/samba ]; then
  23.    . /etc/sysconfig/samba
  24. fi

  25. # Check that networking is up.
  26. [ ${NETWORKING} = "no" ] && exit 0

  27. # Check that smb.conf exists.
  28. [ -f /etc/samba/smb.conf ] || exit 0

  29. RETVAL=0


  30. start() {
  31.         echo -n "Starting..."
  32.         /myops/exec/pause
  33.         echo_success
  34.         echo ""
  35.         return $RETVAL
  36. }       

  37. stop() {
  38.         echo -n "Stopping..."
  39.         /myops/exec/pause
  40.         echo_success
  41.         echo ""
  42.         return $RETVAL
  43. }       

  44. restart() {
  45.         stop
  46.         start
  47. }       

  48. reload() {
  49.         echo -n "Reloading..."
  50.         /myops/exec/pause
  51.         echo_success
  52.         echo ""
  53.         return $RETVAL
  54. }       

  55. status() {
  56.         echo -n "Checking..."
  57.         /myops/exec/pause
  58.         echo_success
  59.         echo ""
  60.         return $RETVAL
  61. }       

  62. case "$1" in
  63.   start)
  64.           start
  65.         ;;
  66.   stop)
  67.           stop
  68.         ;;
  69.   restart)
  70.           restart
  71.         ;;
  72.   reload)
  73.           reload
  74.         ;;
  75.   status)
  76.           status
  77.         ;;
  78.   *)
  79.         echo $"Usage: $0 {start|stop|restart|reload|status}"
  80.         exit 1
  81. esac

  82. exit $?
复制代码


脚本“/etc/rc.d/init.d/smb_2”,最终简化版本:

  1. #!/bin/sh
  2. #
  3. # chkconfig: - 91 35
  4. # description: -_-|||

  5. case "$1" in
  6.   start)
  7. #        start
  8.         echo "Starting AAAAA..."
  9.         echo "[OK]"
  10.         ;;
  11.   stop)
  12. #        stop
  13.         echo "Stopping AAAAA..."
  14.         echo "[OK]"
  15.         ;;
  16.   *)
  17.         echo $"Usage: $0 {start|stop}"
  18.         exit 1
  19. esac

  20. exit $?
复制代码

[ 本帖最后由 自由狼-台风 于 2008-1-11 12:39 编辑 ]
 楼主| 发表于 2008-1-11 20:10:46 | 显示全部楼层
终于找到一个解决方案,但很龌龊,很不地道,很邪恶,很弱小……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-28 23:33 , Processed in 0.060173 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表