» JBoss 5 rc-scripts til FreeBSD
Skrevet af Anders Østergaard Jensen d. 15/10 2009 kl. 00:31Meeho!™ er udviklet og driftet på FreeBSD, der er en UNIX-variant kendt for sin stabilitet og glimrende performance. FreeBSD UNIX betragtes den dag i dag som Internettets egentlige backbone og er fortsat det foretrukne styresystem for internetudbydere. FreeBSD har i hvert fald sikret at Meeho!™ ind til videre har en ubeklageligt pæn oppetid.
Dele af Meeho!™ er udviklet i Java og kører derfor i en Java EE-applikationsserver: JBoss. Nok er JBoss understøttet i FreeBSDs ports, men pakken er oftest nogle versionsnumre bagud. Hvis du har brug for at være cutting/bleeding edge på FreeBSD, er der dog en anden mulighed: manuel installation og deployment med et rc-script, så FreeBSD kan daemonize JBoss som en hvilken som helst anden UNIX daemon.
Hvordan gør man så det? FreeBSD er jo ikke officielt understøttet af JBoss, men efter at have hacket rundt med JBoss’ init-scripts til Red Hat Linux, fandt jeg endelig en holdbar løsning. Kopiér nedenstående scripts ind i de anviste stier og tilret eventuelle paths i scriptet. Du kan nu starte JBoss 5.x med:
/usr/local/etc/rc.d/jboss5 start
Indholdet er da:
#!/bin/sh
# PROVIDE: jboss5
# REQUIRE: LOGIN
# KEYWORD: shutdown
. /etc/rc.subr
name='jboss5'
rcvar=`set_rcvar`
load_rc_config $name
start_cmd="jboss5_start"
stop_cmd="jboss5_stop"
jboss5_start()
{
/usr/local/jboss/bin/jboss_init_freebsd.sh start
}
jboss5_stop()
{
/usr/local/jboss/bin/jboss_init_freebsd.sh stop
}
run_rc_command $1
Derpå kopierer du flg. indhold ind i /usr/local/jboss/bin/jboss_init_freebsd.sh:
#!/bin/sh # This script was originally written for Red Hat Linux. # I ported this script to FreeBSD, since the JBoss bootstrap infrastructure # in FreeBSD Ports is broken. # (C) Anders Oestergaard Jensen, <aj@meeho.dk> 2008 # Move this script to /usr/local/jboss/bin and start it with jboss5 start # from /usr/local/etc/rc.d/ # Also remember to set the correct user in this script (jboss?). # # $Id: jboss_init_redhat.sh 60995 2007-02-28 11:35:31Z dimitris@jboss.org $ # # JBoss Control Script # # To use this script run it as root - it will switch to the specified user # # Here is a little (and extremely primitive) startup/shutdown script # for RedHat systems. It assumes that JBoss lives in /usr/local/jboss, # it's run by user 'jboss' and JDK binaries are in /usr/local/jdk/bin. # All this can be changed in the script itself. # # Either modify this script for your requirements or just ensure that # the following variables are set correctly before calling the script. # define where jboss is - this is the directory containing directories # log, bin, conf etc JBOSS_HOME=${JBOSS_HOME:-"/usr/local/jboss"} # define the user under which jboss will run, or use 'RUNASIS' to run # as the current user JBOSS_USER=${JBOSS_USER:-"jboss"} # Set the user here!!! #make sure java is in your path JAVAPTH=${JAVAPTH:-"/usr/local/bin"} #configuration to use, usually one of 'minimal', 'default', 'all' JBOSS_CONF=${JBOSS_CONF:-"default"} #if JBOSS_HOST specified, use -b to bind jboss services to that address JBOSS_BIND_ADDR=${JBOSS_HOST:+"-b $JBOSS_HOST"} #define the classpath for the shutdown class JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jnet.jar"} #define the script to use to start jboss JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh -c $JBOSS_CONF $JBOSS_BIND_ADDR"} if [ "$JBOSS_USER" = "RUNASIS" ]; then SUBIT="" else SUBIT="su - $JBOSS_USER -c " fi if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then # ensure the file exists touch $JBOSS_CONSOLE if [ ! -z "$SUBIT" ]; then chown $JBOSS_USER $JBOSS_CONSOLE fi fi if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE" echo "WARNING: ignoring it and using /dev/null" JBOSS_CONSOLE="/dev/null" fi #define what will be done with the console log JBOSS_CONSOLE=${JBOSS_CONSOLE:-"/dev/null"} JBOSS_CMD_START="cd $JBOSS_HOME/bin; $JBOSSSH" JBOSS_CMD_STOP=${JBOSS_CMD_STOP:-"java -classpath $JBOSSCP org.jboss.Shutdown --shutdown"} if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then export PATH=$PATH:$JAVAPTH fi if [ ! -d "$JBOSS_HOME" ]; then echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME exit 1 fi echo JBOSS_CMD_START = $JBOSS_CMD_START case "$1" in start) cd $JBOSS_HOME/bin if [ -z "$SUBIT" ]; then eval $JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 & else $SUBIT "$JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &" fi ;; stop) if [ -z "$SUBIT" ]; then $JBOSS_CMD_STOP else $SUBIT "$JBOSS_CMD_STOP" fi ;; restart) $0 stop $0 start ;; *) echo "usage: $0 (start|stop|restart|help)" esac
JBoss på FreeBSD kører ubeklageligt, så snart forarbejdet er gjort ordentligt. Hvis du har nogle gode erfaringer fra udvikling eller drift med Java og JBoss på FreeBSD, så hører vi meget gerne fra dig her på bloggen.



