2016-01-21 44 views
0

我正在尝试在CentOS 6.6上为apache jmeter使用以下服务脚本。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 

服务JMeter的启动和服务JMeter的停止工作正常,但是当我尝试做服务JMeter的重新启动,则停止Java实例,但因为它认为JMeter是已经运行它不再次启动。

任何指针,将不胜感激。

回答

0

你是不是重置/停止更新之间和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 
} 
+0

谢谢你的解释。这很好。我发现在尝试终止进程以允许完全停止的时候,我还必须向do_stop函数添加一个sleep命令。 – jaxim