Vores Meeho!™ Blog giver dig generelle nyheder, tekniske tips, inspiration og mere til i relation til Meeho!™-platformen.

Tilmeld dig gratis nu!

» JBoss 5 rc-scripts til FreeBSD

Skrevet af Anders Østergaard Jensen d. 15/10 2009 kl. 00:31

Meeho!™ 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.

Skriv en kommentar