Wiki

Clone wiki

Shampoo / JettyNetBSDRcD

Example rc.d script for NetBSD

Here's an example Jetty boot script for NetBSD, save it as /etc/rc.d/jetty.

#!/bin/sh
#
# $NetBSD: jetty.sh,v 0.1 2011/11/10 19:22:45 okay_awright Exp $
#
# PROVIDE: jetty
# REQUIRE: DAEMON
# AFTER: network mysqld

. /etc/rc.subr

if [ -z "${JAVA_HOME}" ]
then
    #Uses a custom-built x64 JVM: http://java.net/projects/shampoo/downloads/directory/Misc
        JAVA_HOME="/usr/pkg/java/openjdk7"
        export JAVA_HOME
fi
if [ -z "${JAVA_OPTS}" ]
then
    #Common switches
    JAVA_OPTS="-server -Xms512M -Xmx1536M -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true"
    #Can upload files that weight up to 2Gb though HTTP POST if needed
    JAVA_OPTS="${JAVA_OPTS} -Dorg.eclipse.jetty.server.Request.maxFormContentSize=2000000000"

    #Oracle HotSpot 6/7
    JAVA_OPTS="${JAVA_OPTS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/jetty -XX:ErrorFile=/var/log/jetty/hs_err_pid%p.log"
    JAVA_OPTS="${JAVA_OPTS} -XX:-ReduceInitialCardMarks -XX:MaxPermSize=128M"

    #Uncomment for JMX monitoring
        #JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1099"

        export JAVA_OPTS
fi
if [ -z "${JAVA}" ]
then
        JAVA="${JAVA_HOME}/bin/java"
        export JAVA
fi
TMPDIR=${TMPDIR:-/var/tmp}

name="jetty"
rcvar=${name}
jar="-jar start.jar"
pidfile="/var/run/jetty/${name}.pid"
: ${jetty_port="8080"}
: ${jetty_user="jetty"}
: ${jetty_group="jetty"}
: ${jetty_home="/usr/local/java/jetty"}
: ${jetty_logs="/var/log/jetty"}
: ${jetty_dirs="/var/log/jetty /var/run/jetty"}

extra_commands="status"

start_cmd="jetty_start"
stop_cmd="jetty_stop"
status_cmd="jetty_status"
restart_cmd="jetty_restart"
start_precmd="jetty_prestart"

if [ "${jetty_port}" ]
then
  JAVA_OPTS="${JAVA_OPTS} -Djetty.port=${jetty_port}"
fi
if [ "${jetty_logs}" ]
then 
  JAVA_OPTS="${JAVA_OPTS} -Djetty.logs=${jetty_logs}"
fi
JAVA_OPTS="${JAVA_OPTS} -Djetty.home=${jetty_home} -Djava.io.tmpdir=${TMPDIR} "
if [ -f "${jetty_home}/etc/start.config" ]
then
  JAVA_OPTS="${JAVA_OPTS} -DSTART=${jetty_home}/etc/start.config"
fi

jetty_prestart()
{
        for dir in ${jetty_dirs}; do
                mkdir -p $dir
                chown ${jetty_user}:${jetty_group} $dir
                chmod 0750 $dir
        done
}

jetty_start()
{
        echo "Starting ${name}."
        if [ -f ${pidfile} ]; then
                pid=`head -1 ${pidfile}`
                echo "${name} already running as pid ${pid}."
                return 1
        fi
        cd ${jetty_home} && su -m ${jetty_user} -c "export PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/pkg/sbin:/usr/pkg/bin:${JAVA_HOME}/bin;
        # Update memory and files thresholds enforced by the system, check if your Kernel can witholhd those values
        ulimit -n unlimited;
        ulimit -s unlimited;
        ulimit -m unlimited;
        ulimit -d 1040288;
        ulimit -l 1040288;
        ${JAVA} ${JAVA_OPTS} ${jar} ${rc_flags} &" && cd -
        sleep 1
        PID="`ps -ax|grep "${JAVA}"|grep "-server"|grep -v grep|awk '{print $1;}'`"
        if [ "${PID}" != "" ]; then
                su -m ${jetty_user} -c "echo ${PID} > ${pidfile}"
        fi
}

jetty_stop()
{
        echo "Stopping ${name}."
        if [ -f ${pidfile} ]; then
                pid=`head -1 ${pidfile}`
                if [ "${pid}" != "" ]; then
            #BUG?: Jetty refuses to cleanly die on OpenJDK7 (2009)
                        #doit="su -m ${jetty_user} -c \"kill ${pid}\""
                        #if ! eval $doit && [ -z "$rc_force" ]; then
                        #       return 1
                        #fi
                        #wait_for_pids $pid
                        echo -n '['
                        for WAIT in 1 2 3 4 5 6 7 8 9 10
                        do
                               if kill -0 ${pid} >/dev/null 2>&1; then
                                       sleep 2
                                       echo -n '.'
                                       test $WAIT -lt 10 || kill -9 ${pid}
                               else
                                       break
                               fi
                        done
                        echo ']'
                        unset WAIT
                else
                        echo "${name} is not running?"
                fi
                rm -f ${pidfile}
        else
                echo "${name} is not running?"
        fi
}

jetty_status()
{
        echo "Polling ${name}."
        if [ -f ${pidfile} ]; then
                pid=`head -1 ${pidfile}`
                echo "${name} is running as pid ${pid}."
        else
                echo "${name} is not running?"
        fi
}

jetty_restart()
{
        jetty_stop
        jetty_start
}

load_rc_config $name
run_rc_command "$1"

Now, edit your /etc/rc.conf file and add the following line wherever you see fit, most likely at the end of the file:

jetty=YES

Updated