Hallo,
Ich habe OpenSuse 11.0/GNOME und Glassfish 9.1_02 installiert.
Um den Application Server (Glassfish) beim Booten automatisch zu starten, habe ich anhand /etc/init.d/skeleton ein Skript /etc/init.d/glassfish erstellt sowie Links /etc/init.d/rc5.d/S99glassfish und /etc/init.d/rc5.d/K99glassfish.
Hier ist /etc/init.d/glassfish (Kommentare z.g.T. rausgeschnitten):
Mit diesem Setup kann ich Glassfish in YaST / System Services (Runlevel) korrekt starten und stoppen, jedoch zeigt es (nicht verwunderlich) einen falschen Status an; die Implementation ist nämlich untauglich:
Glassfish ist eine Java-Applikation, d.h. das Executable des Prozesses ist die Java VM. Eigentlich müsste ich also glassfish_BIN= /usr/lib/jvm/jre/bin/java setzen. Dies erfüllt den Zweck aber gar nicht, da dann darauf getestet würde, ob irgend eine beliebige Java-Applikation läuft.
Mit 'ps -ef' sehe ich den Glassfish-Prozess wie folgt:
Kennt jemand den richtigen Trick, um den Status des System Service für Java-Applikationen richtig zu ermitteln?
Im Übrigen wird der Glassfish System Service beim Booten nicht gestartet (nur von Hand funktioniert es); möglicherweise hängt dies mit dem untauglichen Status zusammen. Wenn aber jemand einen andern Fehler sieht, bin ich sehr dankbar um den Hinweis.
Vielen Dank für Hinweise.
Mucker
Ich habe OpenSuse 11.0/GNOME und Glassfish 9.1_02 installiert.
Um den Application Server (Glassfish) beim Booten automatisch zu starten, habe ich anhand /etc/init.d/skeleton ein Skript /etc/init.d/glassfish erstellt sowie Links /etc/init.d/rc5.d/S99glassfish und /etc/init.d/rc5.d/K99glassfish.
Hier ist /etc/init.d/glassfish (Kommentare z.g.T. rausgeschnitten):
Code:
#!/bin/sh
glassfish_BIN=/usr/share/glassfish/lib/appserv
test -x $glassfish_BIN || { echo "$glassfish_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
. /etc/rc.status
# Reset status of this service
rc_reset
case "$1" in
start)
echo -n "Starting glassfish "
/usr/share/glassfish/start_server
# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Shutting down glassfish "
/usr/share/glassfish/stop_server
# Remember status and be verbose
rc_status -v
;;
try-restart|condrestart)
## Do a restart only if the service was active before.
## Note: try-restart is now part of LSB (as of 1.9).
## RH has a similar command named condrestart.
if test "$1" = "condrestart"; then
echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
fi
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
rc_status
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start
# Remember status and be quiet
rc_status
;;
force-reload)
## Signal the daemon to reload its config. Most daemons
## do this on signal 1 (SIGHUP).
## If it does not support it, restart the service if it
## is running.
echo -n "Reload service glasshfish "
## if it supports it:
/sbin/killproc -HUP $glassfish_BIN
#touch /var/run/FOO.pid
rc_status -v
## Otherwise:
#$0 try-restart
#rc_status
;;
reload)
## Like force-reload, but if daemon does not support
## signaling, do nothing (!)
# If it supports signaling:
echo -n "Reload service glassfish "
/sbin/killproc -HUP $glassfish_BIN
#touch /var/run/FOO.pid
rc_status -v
## Otherwise if it does not support reload:
#rc_failed 3
#rc_status -v
;;
status)
echo -n "Checking for service glassfish "
# NOTE: checkproc returns LSB compliant status values.
/sbin/checkproc $glassfish_BIN
# NOTE: rc_status knows that we called this init script with
# "status" option and adapts its messages accordingly.
rc_status -v
;;
probe)
# test /etc/FOO/FOO.conf -nt /var/run/FOO.pid && echo reload
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
exit 1
;;
esac
rc_exit
Mit diesem Setup kann ich Glassfish in YaST / System Services (Runlevel) korrekt starten und stoppen, jedoch zeigt es (nicht verwunderlich) einen falschen Status an; die Implementation ist nämlich untauglich:
Glassfish ist eine Java-Applikation, d.h. das Executable des Prozesses ist die Java VM. Eigentlich müsste ich also glassfish_BIN= /usr/lib/jvm/jre/bin/java setzen. Dies erfüllt den Zweck aber gar nicht, da dann darauf getestet würde, ob irgend eine beliebige Java-Applikation läuft.
Mit 'ps -ef' sehe ich den Glassfish-Prozess wie folgt:
Ich weiss, ein Monstrumroot 5180 1 0 Aug23 ? 00:05:02 /usr/java/jdk1.6.0_07/jre/../bin/java -Dcom.sun.aas.instanceRoot=/usr/share/glassfish/domains/domain1 -Dcom.sun.aas.ClassPathPrefix= -Dcom.sun.aas.ClassPathSuffix= -Dcom.sun.aas.ServerClassPath= -Dcom.sun.aas.classloader.appserverChainJars.ee= -Dcom.sun.aas.classloader.appserverChainJars=admin-cli.jar,admin-cli-ee.jar,j2ee-svc.jar -Dcom.sun.aas.classloader.excludesList=admin-cli.jar,appserv-upgrade.jar,sun-appserv-ant.jar -Dcom.sun.aas.classloader.optionalOverrideableChain.ee= -Dcom.sun.aas.classloader.optionalOverrideableChain=webservices-rt.jar,webservices-tools.jar -Dcom.sun.aas.classloader.serverClassPath.ee=/lib/hadbjdbc4.jar,/usr/share/glassfish/lib/SUNWjdmk/5.1/lib/jdmkrt.jar,/lib/dbstate.jar,/lib/hadbm.jar,/lib/hadbmgt.jar,/lib/mfwk_instrum_tk.jar -Dcom.sun.aas.classloader.serverClassPath=/usr/share/glassfish/lib/install/applications/jmsra/imqjmsra.jar,/usr/share/glassfish/imq/lib/jaxm-api.jar,/usr/share/glassfish/imq/lib/fscontext.jar,/usr/share/glassfish/imq/lib/imqbroker.jar,/usr/share/glassfish/imq/lib/imqjmx.jar,/usr/share/glassfish/lib/ant/lib/ant.jar,/usr/share/glassfish/lib/SUNWjdmk/5.1/lib/jdmkrt.jar -Dcom.sun.aas.classloader.sharedChainJars.ee=appserv-se.jar,appserv-ee.jar,jesmf-plugin.jar,/lib/dbstate.jar,/lib/hadbjdbc4.jar,jgroups-all.jar,/lib/mfwk_instrum_tk.jar -Dcom.sun.aas.classloader.sharedChainJars=javaee.jar,/usr/java/jdk1.6.0_07/jre/../lib/tools.jar,install/applications/jmsra/imqjmsra.jar,com-sun-commons-launcher.jar,com-sun-commons-logging.jar,/usr/share/glassfish/imq/lib/jaxm-api.jar,/usr/share/glassfish/imq/lib/fscontext.jar,/usr/share/glassfish/imq/lib/imqbroker.jar,/usr/share/glassfish/imq/lib/imqjmx.jar,/usr/share/glassfish/imq/lib/imqxm.jar,webservices-rt.jar,webservices-tools.jar,mail.jar,appserv-jstl.jar,jmxremote_optional.jar,/usr/share/glassfish/lib/SUNWjdmk/5.1/lib/jdmkrt.jar,activation.jar,appserv-rt.jar,appserv-admin.jar,appserv-cmp.jar,/usr/share/glassfish/updatecenter/lib/updatecenter.jar,/usr/share/glassfish/jbi/lib/jbi.jar,/usr/share/glassfish/imq/lib/imqjmx.jar,/usr/share/glassfish/lib/ant/lib/ant.jar,dbschema.jar -Dcom.sun.aas.configName=server-config -Dcom.sun.aas.configRoot=/usr/share/glassfish/config -Dcom.sun.aas.defaultLogFile=/usr/share/glassfish/domains/domain1/logs/server.log -Dcom.sun.aas.domainName=domain1 -Dcom.sun.aas.installRoot=/usr/share/glassfish -Dcom.sun.aas.instanceName=server -Dcom.sun.aas.processLauncher=SE -Dcom.sun.aas.promptForIdentity=true -Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory -Dcom.sun.enterprise.overrideablejavaxpackages=javax.help,javax.portlet -Dcom.sun.enterprise.taglibs=appserv-jstl.jar,jsf-impl.jar -Dcom.sun.enterprise.taglisteners=jsf-impl.jar -Dcom.sun.updatecenter.home=/usr/share/glassfish/updatecenter -Ddomain.name=domain1 -Djava.endorsed.dirs=/usr/share/glassfish/lib/endorsed -Djava.ext.dirs=/usr/java/jdk1.6.0_07/jre/../lib/ext:/usr/java/jdk1.6.0_07/jre/../jre/lib/ext:/usr/share/glassfish/domains/domain1/lib/ext:/usr/share/glassfish/javadb/lib -Djava.library.path=/usr/share/glassfish/lib:/usr/share/glassfish/lib:/usr/share/glassfish/lib -Djava.security.auth.login.config=/usr/share/glassfish/domains/domain1/config/login.conf -Djava.security.policy=/usr/share/glassfish/domains/domain1/config/server.policy -Djava.util.logging.manager=com.sun.enterprise.server.logging.ServerLogManager -Djavax.management.builder.initial=com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder -Djavax.net.ssl.keyStore=/usr/share/glassfish/domains/domain1/config/keystore.jks -Djavax.net.ssl.trustStore=/usr/share/glassfish/domains/domain1/config/cacerts.jks -Djdbc.drivers=org.apache.derby.jdbc.ClientDriver -Djmx.invoke.getters=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -client -XX:+UnlockDiagnosticVMOptions -XX:MaxPermSize=192m -Xmx512m -XX:NewRatio=2 -XX:+LogVMOutput -XX:LogFile=/usr/share/glassfish/domains/domain1/logs/jvm.log -cp /usr/share/glassfish/lib/jhall.jar:/usr/share/glassfish/lib/appserv-launch.jar com.s
Kennt jemand den richtigen Trick, um den Status des System Service für Java-Applikationen richtig zu ermitteln?
Im Übrigen wird der Glassfish System Service beim Booten nicht gestartet (nur von Hand funktioniert es); möglicherweise hängt dies mit dem untauglichen Status zusammen. Wenn aber jemand einen andern Fehler sieht, bin ich sehr dankbar um den Hinweis.
Vielen Dank für Hinweise.
Mucker