BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 



[共享]SysV服务脚本(PostgreSQL、Apache-Tomcat、Apache-Httpd)

首页 » 论坛 » Shell »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
自由狼-台风0   帅哥
天使



CU编号: 31370
注册:2002-11-29
最后登录: 2009-06-23
帖子:1240
精华:6

可用积分:760 (丰衣足食)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

来自:襄樊
状态:...离线...

[个人空间] [短信] [博客]


1楼 发表于 2008-1-18 10:51 

[共享]SysV服务脚本(PostgreSQL、Apache-Tomcat、Apache-Httpd)

连查资料加请教带硬摸的成果。首先鸣谢以下同志,在这个探索过程发中他们都或多或少提供了帮助。

鸣谢



  • ChinaUnixer:achlice
  • QQ(Name):路要一个人走
  • QQ(Name):小二
  • QQ(Name):消失在风中[]


目前看来,“/etc/rc.d/rc”在切换运行级别时会运行,并检查“/var/lock/subsys/”,当“/var/lock/subsys/”下有与某服务脚本同名的文件时,一旦切换向该服务“off”的级别,“/etc/rc.d/rc”会自动以“stop”参数调用服务脚本。

[ 本帖最后由 自由狼-台风0 于 2008-1-18 14:57 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

一捧烛火的光芒,照耀每个苦难中的人──请更好地活着,才不会让已逝去的人留下更多牵挂。祝逝者安息,愿生者坚强……
自由狼-台风0   帅哥
天使



CU编号: 31370
注册:2002-11-29
最后登录: 2009-06-23
帖子:1240
精华:6

可用积分:760 (丰衣足食)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

来自:襄樊
状态:...离线...

[个人空间] [短信] [博客]


2楼 发表于 2008-1-18 10:52 

PostgreSQL服务脚本:

========================================

#! /bin/sh

# chkconfig: 35 98 02
# description: PostgreSQL RDBMS start/stop script.

# Version:
#        2008-01-17-01
# By:
#        Typhoon.Free.Wolf.

# Service name.
SVC_NAME="PostgreSQL"
# Lock file.
LOCK_FILE="/var/lock/subsys/tfw_pgsql"
# Installation prefix.
APP_HOME="/opt/prog/m/PostgreSQL.MagicLinux-2.0"
# The process name to monitor.
APP_PROC="postmaster"
# Authorize user.
APP_USER="typhoon"

# Database directory.
PGDATA="/opt/prog/m/PostgreSQL-Database"
# Log file.
LOG_FILE="$PGDATA/server.log"
# A very command at start.
#CMD_START="su - $APP_USER -c \"$APP_HOME/bin/pg_ctl start -w -l $LOG_FILE\""
#CMD_START="su - typhoon -c \'/opt/prog/m/PostgreSQL.MagicLinux-2.0/bin/pg_ctl start -w -l /opt/prog/m/PostgreSQL-Database/server.log\'"
# A very command for stop.
#CMD_STOP="su - $APP_USER -c \"$APP_HOME/bin/pg_ctl stop -m fast\""

# Importing functions.
flg_func=0
if [ -f /etc/init.d/functions ] ; then
        . /etc/init.d/functions
        flg_func=1
elif [ -f /etc/rc.d/init.d/functions ] ; then
        . /etc/rc.d/init.d/functions
        flg_func=1
fi

#echo "SVC_NAME=$SVC_NAME"
#echo "LOCK_FILE=$LOCK_FILE"
#echo "APP_HOME=$APP_HOME"
#echo "APP_PROC=$APP_PROC"
#echo "PGDATA=$PGDATA"
#echo "LOG_FILE=$LOG_FILE"
#echo "APP_USER=$APP_USER"
#echo "CMD_START=$CMD_START"
#echo "CMD_STOP=$CMD_STOP"
#echo "flg_func=$flg_func"
#'/myops/exec/pause'

# Templete.
# Return:
#        FLG_PROC_ON means process is there.
#        FLG_PROC_OFF means process not exists.
#        Other means error.
FLG_PROC_ON=1
FLG_PROC_OFF=0
probe() {
        srch_rst=$(ps -A|grep $APP_PROC|awk '{print $4}')
        for rst in $srch_rst ; do
                if [ $APP_PROC = $rst ] ; then
                        return $FLG_PROC_ON
                fi
        done
        return $FLG_PROC_OFF
}

# Templete.
#        Shows OK.
# Return:
echo_ok() {
        case $flg_func in
                1)
                        echo_success
                        echo ""
                ;;
                *)
                        echo ""
                        echo "        [  OK  ]"
                ;;
        esac
}

# Templete.
#        Shows Passed.
# Return:
echo_pass() {
        case $flg_func in
                1)
                        echo_passed
                        echo ""
                ;;
                *)
                        echo ""
                        echo "        [PASSED]"
                ;;
        esac
}

# Templete.
#        Shows Failed.
# Return:
echo_bad() {
        case $flg_func in
                1)
                        echo_failure
                        echo ""
                ;;
                *)
                        echo ""
                        echo "        [FAILED]"
                ;;
        esac
}

# Templete.
#        Start section.
# Return:
_start() {
        probe
        proc=$?
        echo ""
        echo "Starting $SVC_NAME..."

        if (touch $LOCK_FILE) ; then
                echo_ok
        else
                echo_bad
        fi
}

start() {
        probe
        proc=$?
        echo ""
        echo "Starting $SVC_NAME..."

        if [ $FLG_PROC_OFF = $proc ] ; then
                if (su - $APP_USER -c "$APP_HOME/bin/pg_ctl start -w -l $LOG_FILE") ; then
                        if (touch $LOCK_FILE) ; then
                                echo_ok
                        else
                                echo_pass
                                echo ""
                        fi
                else
                        echo_bad
                fi
        elif [ $FLG_PROC_ON = $proc ] ; then
                if (touch $LOCK_FILE) ; then
                        echo_passed
                        echo ""
                else
                        echo_bad
                fi
        fi
}

# Templete.
#        Stop section.
# Return:
_stop() {
        probe
        proc=$?
        echo ""
        echo "Stopping $SVC_NAME..."

        if (rm -Rf $LOCK_FILE) ; then
                echo_ok
        else
                echo_bad
        fi
}

stop() {
        probe
        proc=$?
        echo ""
        echo "Stopping $SVC_NAME..."

        if [ $FLG_PROC_OFF = $proc ] ; then
                if (rm -Rf $LOCK_FILE) ; then
                        echo_passed
                        echo ""
                else
                        echo_bad
                fi
        elif [ $FLG_PROC_ON = $proc ] ; then
                if (su - $APP_USER -c "$APP_HOME/bin/pg_ctl stop -m fast") ; then
                        if (rm -Rf $LOCK_FILE) ; then
                                echo_ok
                        else
                                echo_pass
                                echo ""
                        fi
                else
                        echo_bad
                fi
        fi
}

reload() {
        probe
        proc=$?
        if [ $FLG_PROC_ON = $proc ] ; then
                echo ""
                echo "Reloading $SVC_NAME..."

                if (su - $APP_USER -c "$APP_HOME/bin/pg_ctl reload") ; then
                        if (rm -f $LOCK_FILE) ; then
                                echo_ok
                        else
                                echo_pass
                        fi
                else
                        echo_bad
                fi
        fi
}

status() {
        probe
        proc=$?

        echo ""
        echo "Checking $SVC_NAME..."

        su - $APP_USER -c "$APP_HOME/bin/pg_ctl status -D '$PGDATA'"
}

# Parse command line parameters.
case $1 in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart)
                stop
                start
        ;;
        reload)
                reload
        ;;
        status)
                status
        ;;
        *)
                # Print help
                echo "Usage: $0 {start|stop|restart|reload|status}"
                exit 1
        ;;
esac

exit 0


[ 本帖最后由 自由狼-台风0 于 2008-1-18 10:54 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

一捧烛火的光芒,照耀每个苦难中的人──请更好地活着,才不会让已逝去的人留下更多牵挂。祝逝者安息,愿生者坚强……
自由狼-台风0   帅哥
天使



CU编号: 31370
注册:2002-11-29
最后登录: 2009-06-23
帖子:1240
精华:6

可用积分:760 (丰衣足食)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

来自:襄樊
状态:...离线...

[个人空间] [短信] [博客]


3楼 发表于 2008-1-18 11:08 

Apache-Tomcat服务脚本:

========================================

#! /bin/sh

# chkconfig: 35 96 04
# description: Apache-Tomcat service script.

# Version:
#        2008-01-17-01
# By:
#        Typhoon.Free.Wolf.

# Service name.
SVC_NAME="Apache-Tomcat"
# Lock file.
LOCK_FILE="/var/lock/subsys/tfw_tomcat"
# Installation prefix.
APP_HOME="/opt/prog/c/Apache/Tomcat"
# The process name to monitor.
APP_PROC="java"
# Authorize user.
APP_USER="typhoon"

SLEEP_START=5
SLEEP_STOP=$SLEEP_START

# Importing functions.
flg_func=0
if [ -f /etc/init.d/functions ] ; then
        . /etc/init.d/functions
        flg_func=1
elif [ -f /etc/rc.d/init.d/functions ] ; then
        . /etc/rc.d/init.d/functions
        flg_func=1
fi

# Templete.
# Return:
#        FLG_PROC_ON means process is there.
#        FLG_PROC_OFF means process not exists.
#        Other means error.
FLG_PROC_ON=1
FLG_PROC_OFF=0
probe() {
        srch_rst=$(ps -A|grep $APP_PROC|awk '{print $4}')
        for rst in $srch_rst ; do
                if [ $APP_PROC = $rst ] ; then
                        return $FLG_PROC_ON
                fi
        done
        return $FLG_PROC_OFF
}

# Templete.
#        Shows OK.
# Return:
echo_ok() {
        case $flg_func in
                1)
                        echo_success
                        echo ""
                ;;
                *)
                        echo ""
                        echo "        [  OK  ]"
                ;;
        esac
}

# Templete.
#        Shows Passed.
# Return:
echo_pass() {
        case $flg_func in
                1)
                        echo_passed
                        echo ""
                ;;
                *)
                        echo ""
                        echo "        [PASSED]"
                ;;
        esac
}

# Templete.
#        Shows Failed.
# Return:
echo_bad() {
        case $flg_func in
                1)
                        echo_failure
                        echo ""
                ;;
                *)
                        echo ""
                        echo "        [FAILED]"
                ;;
        esac
}

# Templete.
#        Start section.
# Return:
_start() {
        probe
        proc=$?
        echo ""
        echo "Starting $SVC_NAME..."

        if (touch $LOCK_FILE) ; then
                echo_ok
        else
                echo_bad
        fi
}

start() {
        probe
        proc=$?
        echo ""
        echo "Starting $SVC_NAME..."

        if [ $FLG_PROC_OFF = $proc ] ; then
                if (su - $APP_USER -c "$APP_HOME/bin/startup.sh") ; then
                        sleep $SLEEP_START
                        if (touch $LOCK_FILE) ; then
                                echo_ok
                        else
                                echo_pass
                                echo ""
                        fi
                else
                        echo_bad
                fi
        elif [ $FLG_PROC_ON = $proc ] ; then
                if (touch $LOCK_FILE) ; then
                        echo_passed
                        echo ""
                else
                        echo_bad
                fi
        fi
}

# Templete.
#        Stop section.
# Return:
_stop() {
        probe
        proc=$?
        echo ""
        echo "Stopping $SVC_NAME..."

        if (rm -Rf $LOCK_FILE) ; then
                echo_ok
        else
                echo_bad
        fi
}

stop() {
        probe
        proc=$?
        echo ""
        echo "Stopping $SVC_NAME..."

        if [ $FLG_PROC_OFF = $proc ] ; then
                if (rm -Rf $LOCK_FILE) ; then
                        echo_passed
                        echo ""
                else
                        echo_bad
                fi
        elif [ $FLG_PROC_ON = $proc ] ; then
                if (su - $APP_USER -c "$APP_HOME/bin/shutdown.sh") ; then
                        sleep $SLEEP_STOP
                        if (rm -Rf $LOCK_FILE) ; then
                                echo_ok
                        else
                                echo_pass
                                echo ""
                        fi
                else
                        echo_bad
                fi
        fi
}

# Parse command line parameters.
case $1 in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart)
                stop
                start
        ;;
        *)
                # Print help
                echo "Usage: $0 {start|stop|restart}"
                exit 1
        ;;
esac

exit 0



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

一捧烛火的光芒,照耀每个苦难中的人──请更好地活着,才不会让已逝去的人留下更多牵挂。祝逝者安息,愿生者坚强……
自由狼-台风0   帅哥
天使



CU编号: 31370
注册:2002-11-29
最后登录: 2009-06-23
帖子:1240
精华:6

可用积分:760 (丰衣足食)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

来自:襄樊
状态:...离线...

[个人空间] [短信] [博客]


4楼 发表于 2008-1-18 11:14 

Apache-Httpd服务脚本

========================================

#! /bin/sh

# chkconfig: 35 94 06
# description: Apache-Httpd service script.

# Version:
#        2008-01-17-01
# By:
#        Typhoon.Free.Wolf.

# Service name.
SVC_NAME="Apache-Tomcat"
# Lock file.
LOCK_FILE="/var/lock/subsys/tfw_httpd"
# Installation prefix.
APP_HOME="/opt/prog/c/Apache/Httpd"
# The process name to monitor.
APP_PROC="httpd"
# Authorize user.
APP_USER="root"

SLEEP_START=0
SLEEP_STOP=$SLEEP_START

# Importing functions.
flg_func=0
if [ -f /etc/init.d/functions ] ; then
        . /etc/init.d/functions
        flg_func=1
elif [ -f /etc/rc.d/init.d/functions ] ; then
        . /etc/rc.d/init.d/functions
        flg_func=1
fi

# Templete.
# Return:
#        FLG_PROC_ON means process is there.
#        FLG_PROC_OFF means process not exists.
#        Other means error.
FLG_PROC_ON=1
FLG_PROC_OFF=0
probe() {
        srch_rst=$(ps -A|grep $APP_PROC|awk '{print $4}')
        for rst in $srch_rst ; do
                if [ $APP_PROC = $rst ] ; then
                        return $FLG_PROC_ON
                fi
        done
        return $FLG_PROC_OFF
}

# Templete.
#        Shows OK.
# Return:
echo_ok() {
        case $flg_func in
                1)
                        echo_success
                        echo ""
                ;;
                *)
                        echo ""
                        echo "        [  OK  ]"
                ;;
        esac
}

# Templete.
#        Shows Passed.
# Return:
echo_pass() {
        case $flg_func in
                1)
                        echo_passed
                        echo ""
                ;;
                *)
                        echo ""
                        echo "        [PASSED]"
                ;;
        esac
}

# Templete.
#        Shows Failed.
# Return:
echo_bad() {
        case $flg_func in
                1)
                        echo_failure
                        echo ""
                ;;
                *)
                        echo ""
                        echo "        [FAILED]"
                ;;
        esac
}

# Templete.
#        Start section.
# Return:
_start() {
        probe
        proc=$?
        echo ""
        echo "Starting $SVC_NAME..."

        if (touch $LOCK_FILE) ; then
                echo_ok
        else
                echo_bad
        fi
}

start() {
        probe
        proc=$?
        echo ""
        echo "Starting $SVC_NAME..."

        if [ $FLG_PROC_OFF = $proc ] ; then
                if ($APP_HOME/bin/apachectl start) ; then
                        sleep $SLEEP_START
                        if (touch $LOCK_FILE) ; then
                                echo_ok
                        else
                                echo_pass
                                echo ""
                        fi
                else
                        echo_bad
                fi
        elif [ $FLG_PROC_ON = $proc ] ; then
                if (touch $LOCK_FILE) ; then
                        echo_passed
                        echo ""
                else
                        echo_bad
                fi
        fi
}

# Templete.
#        Stop section.
# Return:
_stop() {
        probe
        proc=$?
        echo ""
        echo "Stopping $SVC_NAME..."

        if (rm -Rf $LOCK_FILE) ; then
                echo_ok
        else
                echo_bad
        fi
}

stop() {
        probe
        proc=$?
        echo ""
        echo "Stopping $SVC_NAME..."

        if [ $FLG_PROC_OFF = $proc ] ; then
                if (rm -Rf $LOCK_FILE) ; then
                        echo_passed
                        echo ""
                else
                        echo_bad
                fi
        elif [ $FLG_PROC_ON = $proc ] ; then
                if ($APP_HOME/bin/apachectl stop) ; then
                        sleep $SLEEP_STOP
                        if (rm -Rf $LOCK_FILE) ; then
                                echo_ok
                        else
                                echo_pass
                                echo ""
                        fi
                else
                        echo_bad
                fi
        fi
}

# Parse command line parameters.
case $1 in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart)
                stop
                start
        ;;
        *)
                # Print help
                echo "Usage: $0 {start|stop|restart}"
                exit 1
        ;;
esac

exit 0



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

一捧烛火的光芒,照耀每个苦难中的人──请更好地活着,才不会让已逝去的人留下更多牵挂。祝逝者安息,愿生者坚强……
FinalBSD   美女
荣誉版主-大法师



荣誉版主  
CU编号: 111414
注册:2003-11-12
最后登录: 2009-06-19
帖子:8681
精华:2

可用积分:2042 (小富即安)
信誉积分:105
专家积分:35 (本版:0)
空间积分:0
推广积分:0

来自:上海
状态:...离线...

[个人空间] [短信] [博客]


5楼 发表于 2008-1-18 12:15 

倒,我都是直接cp其他的改改就行了,好使:mrgreen:



您对本贴的看法:鲜花[0] 臭蛋[0]
自由狼-台风0   帅哥
天使



CU编号: 31370
注册:2002-11-29
最后登录: 2009-06-23
帖子:1240
精华:6

可用积分:760 (丰衣足食)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

来自:襄樊
状态:...离线...

[个人空间] [短信] [博客]


6楼 发表于 2008-1-18 15:03 



QUOTE:
原帖由 FinalBSD 于 2008-1-18 12:15 发表
倒,我都是直接cp其他的改改就行了,好使:mrgreen:

初次接触带逻辑控制的Shell脚本,而且还是SysV服务脚本,Shell语法和很多字符串处理命令都是陌生的,开头三天一直在抓瞎和瞎抓。
也试过改别的脚本,smb、cups、xinetd都试过,但一直不得要领,一改就改坏了。
再往后弄出来个不是办法的办法,但很邪恶很弱小,很不甘心。
直到前天才有眉目,昨天才完成:em06:

[ 本帖最后由 自由狼-台风0 于 2008-1-18 15:06 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

一捧烛火的光芒,照耀每个苦难中的人──请更好地活着,才不会让已逝去的人留下更多牵挂。祝逝者安息,愿生者坚强……

首页 » 论坛 » Shell »


 


Copyright © 2001-2009 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.100569 second(s), 4 queries , Gzip enabled