【问题标题】:jmeter service script. restart not workingjmeter 服务脚本。重启不工作
【发布时间】:2016-04-27 14:43:09
【问题描述】:

我正在尝试在 Centos 6.6 上为 apache jmeter 使用以下服务脚本。

#!/bin/sh
### BEGIN INIT INFO
# chkconfig:         2345 85 15
# Provides:          jmeter-server
# Required-Start:    $syslog $local_fs
# Required-Stop:     $syslog $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Apache JMeter Remote Server
# Description:       Apache JMeter Remote Server runs JMeter tests issued from a remote server.
### END INIT INFO

# Author: Brian Flad <bflad417 at gmail dot com>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
NAME=jmeter
JMETER_PATH=/usr/share/jmeter
# RMI_HOST_DEF is referenced/used inside the $JMETER_PATH/bin/$NAME-server script
# Change this to your IP
export RMI_HOST_DEF="-Djava.rmi.server.hostname=10.0.2.15"
SCRIPTNAME=/etc/init.d/$NAME
JAVA_PID=$(pgrep -f "[A]pacheJMeter.jar $RMI_HOST_DEF -Dserver_port=1099")

# Source function library.
. /etc/rc.d/init.d/functions

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

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

[ -f $JMETER_PATH/bin/$NAME-server ] || exit 0
[ -f $JMETER_PATH/bin/$NAME ] || exit 0

#
# Function that starts the daemon/service
#
do_start()
{
        [ -n "$JAVA_PID" ] && echo "$NAME already started" && exit 0
        echo -n "Starting $NAME: "
        $JMETER_PATH/bin/$NAME-server 2>&1 &
        RETVAL=$?
        MODE="normal"
        echo "$NAME started in $MODE mode"
        [ $RETVAL = 0 ] && touch /var/lock/subsys/$NAME
}

#
# Function that stops the daemon/service
#
do_stop()
{
        [ -z "$JAVA_PID" ] && echo "$NAME already stopped" && exit 0
        echo -n "Shutting down $NAME: "
        kill "$JAVA_PID"
        RETVAL=$?
        echo "return is $RETVAL"
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/$NAME
}

#
# Function that gives status of daemon/server
#
do_status()
{
        if [ -n "$JAVA_PID" ]; then
            MODE="RUNNING pid $JAVA_PID"
            RETVAL=0
        else
            MODE="STOPPED"
            RETVAL=1
        fi
        echo "$NAME is $MODE"
}

#
# Function that stops and restarts daemon/server
#
do_restart()
{
        do_stop
        do_start
}

case "$1" in
  start)
        do_start
        ;;
  stop)
        do_stop
        ;;
  status)
        do_status
        ;;
  restart|force-reload)
        do_restart
        ;;
  condrestart)
        [ -e /var/lock/subsys/$NAME ] && do_restart
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
        exit 3
        ;;
esac

exit $RETVAL

service jmeter start 和 service jmeter stop 工作正常,但是当我尝试重新启动 service jmeter 时,它正在停止 java 实例,但它没有再次启动它,因为它认为 jmeter 已经在运行。

任何指针将不胜感激。

【问题讨论】:

    标签: java shell service centos jmeter


    【解决方案1】:

    您没有在停止和启动命令之间重置/更新JAVA_PID,因此start 将根据以下条件退出:

     [ -n "$JAVA_PID" ] && echo "$NAME already started" && exit 0 
    

    您需要在停止 JAVA_PID 后重置/更新它,例如

    update_pid()
    {
        JAVA_PID=$(pgrep -f "[A]pacheJMeter.jar $RMI_HOST_DEF -Dserver_port=1099")
    }
    ...
    do_restart()
    {
         do_stop
         update_pid
         do_start
    }
    

    【讨论】:

    • 感谢您的解释。那效果很好。我发现在尝试终止进程后,我还必须向 do_stop 函数添加一个 sleep 命令,以便有时间让它完全停止。
    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2021-03-24
    • 2015-02-14
    • 1970-01-01
    • 2015-09-15
    • 2023-03-02
    相关资源
    最近更新 更多