JSVC作为守护进程启动 - 启用JMX?

时间:2012-10-16 10:05:49

标签: java jmx jsvc

我正在使用JSVC启动我的java程序作为一个应该全天候运行的守护进程。

但是,我曾经让JMX监视我的应用程序,直到我决定将其转换为守护进程。

我的init.d脚本就像这样

#!/bin/sh

# Setup variables
EXEC=/usr/bin/jsvc
JAVA_HOME=/usr/lib/jvm/java-6-openjdk
CLASS_PATH="/usr/share/java/commons-daemon.jar":"/fullpath/Myserver.jar"
CLASS=myserver.Main
USER=myserver
PID=/var/run/myserver.pid
LOG_OUT=/var/log/myserver/client.out
LOG_ERR=/var/log/myserver/client.err


do_exec()
{
    $EXEC -home "$JAVA_HOME"  -cp $CLASS_PATH -user $USER -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS -Xmx30M -Djava.rmi.server.hostname=123.234.12.34 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/fullpath/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/fullpath/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1234
}

case "$1" in
    start)
        do_exec
            ;;
    stop)
        do_exec "-stop"
            ;;
    restart)
        if [ -f "$PID" ]; then
            do_exec "-stop"
            do_exec
        else
            echo "service not running, will do nothing"
            exit 1
        fi
            ;;
    *)
            echo "usage: daemon {start|stop|restart}" >&2
            exit 3
            ;;
esac

-D选项似乎没有生效,因为JMX不使用端口1234(或我指定的任何其他端口)。

应用程序运行得很好,但不是JMX。我不知道从哪里开始搜索,你有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我需要替换:

$EXEC -home "$JAVA_HOME"  -cp $CLASS_PATH -user $USER -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS -Xmx30M -Djava.rmi.server.hostname=123.234.12.34 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/fullpath/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/fullpath/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1234

使用:

$EXEC -home "$JAVA_HOME"  -cp $CLASS_PATH -user $USER -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID -Xmx30M -Djava.rmi.server.hostname=123.234.12.34 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/fullpath/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/fullpath/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1234 $1 $CLASS 

所以,不要在$CLASS

之后添加其他参数