免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2638 | 回复: 5
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-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
2 [报告]
发表于 2008-01-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
3 [报告]
发表于 2008-01-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
4 [报告]
发表于 2008-01-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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2008-01-18 12:15 |只看该作者
倒,我都是直接cp其他的改改就行了,好使

论坛徽章:
0
6 [报告]
发表于 2008-01-18 15:03 |只看该作者
原帖由 FinalBSD 于 2008-1-18 12:15 发表
倒,我都是直接cp其他的改改就行了,好使

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

[ 本帖最后由 自由狼-台风0 于 2008-1-18 15:06 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP