Skip to content

Instantly share code, notes, and snippets.

@oberhamsi
Created November 15, 2012 10:27
Show Gist options
  • Save oberhamsi/4077867 to your computer and use it in GitHub Desktop.
Save oberhamsi/4077867 to your computer and use it in GitHub Desktop.
ringojs init.d
#!/bin/sh
#
# /etc/init.d/ringojs -- startup script for the Ringo JavaScript runtime
#
# Written by Miquel van Smoorenburg <[email protected]>.
# Modified for Debian GNU/Linux by Ian Murdock <[email protected]>.
# Modified for Tomcat by Stefan Gybas <[email protected]>.
# Modified for Tomcat6 by Thierry Carrez <[email protected]>.
# Modified for RingoJS by Hannes Wallnoefer <[email protected]>.
#
### BEGIN INIT INFO
# Provides: ringojs
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: $named
# Should-Stop: $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start RingoJS
# Description: Start RingoJS
### END INIT INFO
set -e
PATH=/bin:/usr/bin:/sbin:/usr/sbin
RINGO_APP_NAME=`/usr/bin/basename $0`
DESC="Ringo JavaScript runtime"
CONFIG=/etc/default/$RINGO_APP_NAME
if [ ! -e $CONFIG ]; then
exit 0
fi
. /lib/lsb/init-functions
. /etc/default/rcS
if [ `id -u` -ne 0 ]; then
log_failure_msg "You need root privileges to run this script"
exit 1
fi
# Make sure ringo is started with system locale
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG
fi
# The following variables can be overwritten in $CONFIG
RINGO_LOG_DIR=/var/log/ringojs
# direct both stdout and stderr to ringo-out.log
RINGO_OUT=${RINGO_LOG_DIR}/${RINGO_APP_NAME}/${RINGO_APP_NAME}-out.log
#RINGO_ERR="$RINGO_LOG_DIR/ringo-err.log"
RINGO_ERR="&1"
# Run Ringo as this user ID
RINGO_USER=ringojs
RINGO_HOME=/usr/local/ringojs
# Run this application
RINGO_APP=modules/ringo/httpserver.js
# Arguments to pass to RingoJS runtime
RINGO_OPTS=""
# Arguments to pass to the application script
RINGO_APP_OPTS="-p 8080 /usr/local/ringojs/tools/admin/main.js"
# Set the RingoJS module search path
RINGO_MODULE_PATH=""
# End of variables that can be overwritten in $CONFIG
# overwrite settings from default file
if [ -f "$CONFIG" ]; then
. "$CONFIG"
fi
export RINGO_MODULE_PATH
# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined)
JDK_DIRS="/usr/lib/jvm/java-6-sun /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"
# Look for the right JVM to use
for jdir in $JDK_DIRS; do
if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
JAVA_HOME="$jdir"
fi
done
if [ -z "$JAVA_HOME" ]; then
log_failure_msg "no JDK found - please set JAVA_HOME"
exit 1
fi
JAVA_BIN=$JAVA_HOME/bin/java
export JAVA_HOME
# Default Java options
# Set java.awt.headless=true if JAVA_OPTS is not set so the
# Xalan XSL transformer can work without X11 display on JDK 1.4+
# It also looks like the default heap size of 64M is not enough for most cases
# so the maximum heap size is set to 128M
if [ -z "$JAVA_OPTS" ]; then
JAVA_OPTS="-Djava.awt.headless=true -Xmx128M"
fi
if [ ! -f "$RINGO_HOME/run.jar" ]; then
log_failure_msg "$RINGO_HOME/run.jar is not installed"
exit 1
fi
if [ ! -f "$JAVA_BIN" ]; then
log_failure_msg "missing $JAVA_BIN"
exit 1
fi
JAVA_OPTS="$JAVA_OPTS "-Dringo.home="$RINGO_HOME"
if [ ! -d "$RINGO_APP_DIR" ]; then
log_failure_msg "invalid RINGO_APP_DIR: $RINGO_APP_DIR"
exit 1
fi
JAVA_OPTS="$JAVA_OPTS "-D$RINGO_APP_NAME.logdir="$RINGO_LOG_DIR -jar $RINGO_HOME/run.jar"
# Define other required variables
RINGO_PID="/var/run/$RINGO_APP_NAME.pid"
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$RINGO_APP_NAME"
if start-stop-daemon --test --start --pidfile "$RINGO_PID" \
--user $RINGO_USER --startas "$JAVA_BIN" \
>/dev/null
then
log_progress_msg "... "
cd "$RINGO_APP_DIR"
start-stop-daemon --background --make-pidfile --quiet --start --oknodo --chuid $RINGO_USER --pidfile "$RINGO_PID" --exec "$JAVA_BIN" --startas "/bin/bash" -- -c "exec $JAVA_BIN $JAVA_OPTS $RINGO_OPTS $RINGO_APP $RINGO_APP_OPTS >$RINGO_OUT 2>$RINGO_ERR"
# no output redirect
# start-stop-daemon --background --make-pidfile --quiet --start --oknodo --chuid $RINGO_USER --pidfile "$RINGO_PID" --exec "$JAVA_BIN" --startas "/bin/bash" -- -c "exec $JAVA_BIN $JAVA_OPTS $RINGO_OPTS $RINGO_APP $RINGO_APP_OPTS"
# echo "$JAVA_BIN $JAVA_OPTS $RINGO_OPTS $RINGO_APP $RINGO_APP_OPTS >$RINGO_OUT 2>$RINGO_ERR "
# /usr/bin/sudo -u $RINGO_USER -- "$JAVA_BIN" $JAVA_OPTS $RINGO_OPTS $RINGO_APP $RINGO_APP_OPTS >$RINGO_OUT 2>$RINGO_ERR &
sleep 1
start-stop-daemon --test --start --quiet --oknodo --user $RINGO_USER --pidfile "$RINGO_PID" --exec "$JAVA_BIN"
status=$?
if [ "$status" = "0" ]; then
log_progress_msg "started"
else
log_progress_msg "start failed?"
fi
log_end_msg $status
else
log_progress_msg "(already running)"
log_end_msg 0
fi
;;
stop)
log_daemon_msg "Stopping $DESC" "$RINGO_APP_NAME"
start-stop-daemon --stop --quiet --oknodo --pidfile "$RINGO_PID" --user $RINGO_USER --exec "$JAVA_BIN"
log_end_msg $?
rm -f "$RINGO_PID"
;;
status)
if start-stop-daemon --test --start --pidfile "$RINGO_PID" \
--user $RINGO_USER --exec "$JAVA_BIN" \
>/dev/null
then
if [ -f "$RINGO_PID" ]; then
log_success_msg "$DESC $RINGO_APP_NAME is not running, but pid file with `/bin/cat $RINGO_PID` exists. "
exit 1
else
log_success_msg "$DESC $RINGO_APP_NAME is not running."
exit 3
fi
else
log_success_msg "$DESC $RINGO_APP_NAME is running with pid `cat $RINGO_PID`"
fi
;;
restart|force-reload)
if start-stop-daemon --test --stop --pidfile "$RINGO_PID" \
--user $RINGO_USER --exec "$JAVA_BIN" \
>/dev/null
then
$0 stop
sleep 1
fi
$0 start
;;
try-restart)
if start-stop-daemon --test --start --pidfile "$RINGO_PID" \
--user $RINGO_USER --exec "$JAVA_BIN" \
>/dev/null
then
$0 start
fi
;;
*)
log_success_msg "Usage: $0 {start|stop|restart|try-restart|force-reload|status}"
exit 1
;;
esac
: #exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment