Skip to content

Instantly share code, notes, and snippets.

@leite
Last active December 17, 2015 06:58
Show Gist options
  • Save leite/5569029 to your computer and use it in GitHub Desktop.
Save leite/5569029 to your computer and use it in GitHub Desktop.
jetty one run installer
#! /bin/bash
JETTY_BIN_URL=http://eclipse.c3sl.ufpr.br/jetty/8.1.9.v20130131/dist/jetty-distribution-8.1.9.v20130131.tar.gz
JETTY_DIR=/etc/jetty
JETTY_USER=jetty
JETTY_GROUP=www-data
JETTY_PID=/var/run/jetty.pid
JETTY_PORT=8080
JETTY_LOGS=/var/log/jetty
# bash 4
if ((BASH_VERSINFO[0] < 4)); then echo "Sorry, you need at least bash-4.0 to run this script." >&2; exit 1; fi
#
function user_add {
local USER="$1"
local HOSTGROUP="$2"
# check group exists
/bin/egrep -i "^${HOSTGROUP}" /etc/group >/dev/null
if [ ! $? -eq 0 ]; then
groupadd $HOSTGROUP >/dev/null
fi
# check user exists
/bin/egrep -i "^${USER}" /etc/passwd >/dev/null
if [ $? -eq 0 ]; then
usermod -G$HOSTGROUP $USER >/dev/null
else
# system user
useradd --system --no-create-home -g $HOSTGROUP $USER >/dev/null
fi
}
function err {
echo "$(tput bold)$(tput setaf 1)$1$(tput sgr0)"
}
#
function puts {
echo "$(tput setaf 4)$1$(tput sgr0)"
}
# assert last command
function assert {
if [ $? -gt 0 ]; then
err "$1"
exit 1
fi
}
# setting jetty home
mkdir -p $JETTY_DIR
mkdir -p $JETTY_DIR/packages
mkdir -p $JETTY_LOGS
puts "downloading jetty"
curl --output $JETTY_DIR/packages/jetty.tar.gz $JETTY_BIN_URL --progress-bar -L --retry 2
assert "fail to download"
puts "decompressing jetty"
tar zxf $JETTY_DIR/packages/jetty.tar.gz -C $JETTY_DIR
assert "fail to decompress"
puts "cleaning up"
cp -R $JETTY_DIR/jetty*/* $JETTY_DIR
rm -r -f $JETTY_DIR/jetty*
rm -r -f $JETTY_DIR/packages
assert "fail to clean up"
#:>$JETTY_DIR/start.d/test-webapp.ini
#assert "fail to ..."
# securing rights
puts "securing"
user_add $JETTY_USER $JETTY_GROUP
chown -R $JETTY_USER:$JETTY_GROUP $JETTY_DIR
chown -R $JETTY_USER:$JETTY_GROUP $JETTY_LOGS
assert "fail to securing folders and files"
JAVA_HOME=`which java`
# init script
puts "writing daemon script"
cat > /etc/init.d/jetty <<EOF
#! /bin/bash
JETTY_CFG_PORT=${JETTY_PORT}
JETTY_CFG_LOGS=${JETTY_LOGS}
JETTY_CFG_HOME=${JETTY_DIR}
JETTY_CFG_PID=${JETTY_PID}
JETTY_CFG_CONF="OPTIONS=Server,jsp"
JETTY_CFG_USER=${JETTY_USER}
JETTY_CFG_GROUP=${JETTY_GROUP}
JAVA_HOME=${JAVA_HOME}
PATH=\$PATH:\$HOME/bin:\$JAVA_HOME/bin
function usage {
echo "Usage: \${0##*/} [-d] {start|stop|check|status|restart}"
exit 1
}
[[ \$# -gt 0 ]] || usage
function running {
local PID=\$(cat "\$1" 2>/dev/null) || return 1
kill -0 "\$PID" 2>/dev/null
}
function started {
for T in 1 2 3 4 5 6 7 9 10 11 12 13 14 15; do
sleep 4
local PID=\$(cat "\$1" 2>/dev/null) || return 1
kill -0 "\$PID" 2>/dev/null && return 0
echo -n ". "
done
return 1
}
JAVA=\$(which java) # set java
JAVA_OPTIONS+=(" -server -Xms256m -Xmx512m -XX:+DisableExplicitGC ") # heap min-max size
[[ "\$JETTY_CFG_PORT" ]] && JAVA_OPTIONS+=("-Djetty.port=\$JETTY_CFG_PORT") # jetty port
[[ "\$JETTY_CFG_LOGS" ]] && JAVA_OPTIONS+=("-Djetty.logs=\$JETTY_CFG_LOGS") # jetty log
JAVA_OPTIONS+=("-Djetty.home=\${JETTY_CFG_HOME}" "-Djava.io.tmpdir=/tmp") # jetty home
JETTY_START=\${JETTY_CFG_HOME}/start.jar # start jar
[[ ! -f "\$JETTY_START" ]] && JETTY_START=\$JETTY_CFG_HOME/lib/start.jar # ...
START_INI=\$(dirname \$JETTY_START)/start.ini # start ini
RUN_ARGS=(\${JAVA_OPTIONS[@]} -jar "\$JETTY_START" \$JETTY_CFG_CONF) # run arguments
RUN_CMD=("\$JAVA" \${RUN_ARGS[@]}) # run command
case "\$1" in
start)
echo -n "Starting Jetty: "
if type start-stop-daemon > /dev/null 2>&1; then
start-stop-daemon -S -p"\$JETTY_CFG_PID" -c\$JETTY_CFG_USER -d"\$JETTY_CFG_HOME" -b -m -a "\$JAVA" -- "\${RUN_ARGS[@]}" --daemon
else
if [ -f "\$JETTY_CFG_PID" ]; then
if running \$JETTY_CFG_PID; then
echo "Already Running!"
exit 1
else
rm -f "\$JETTY_CFG_PID"
fi
fi
touch "\$JETTY_CFG_PID"
chown "\$JETTY_CFG_USER" "\$JETTY_CFG_PID"
su - "\$JETTY_CFG_USER" -c "
exec \${RUN_CMD[*]} --daemon &
disown \\\$!
echo \\\$! > '\$JETTY_CFG_PID'"
fi
if started "\$JETTY_CFG_PID"; then
echo "OK \`date\`"
else
echo "FAILED \`date\`"
fi
;;
stop)
echo -n "Stopping Jetty: "
if type start-stop-daemon > /dev/null 2>&1; then
start-stop-daemon -K -p"\$JETTY_CFG_PID" -d"\$JETTY_CFG_HOME" -a "\$JAVA" -s HUP
#
TIMEOUT=30
while running "\$JETTY_CFG_PID"; do
if (( TIMEOUT-- == 0 )); then
start-stop-daemon -K -p"\$JETTY_CFG_PID" -d"\$JETTY_CFG_HOME" -a "\$JAVA" -s KILL
fi
sleep 1
done
else
PID=\$(cat "\$JETTY_CFG_PID" 2>/dev/null)
kill "\$PID" 2>/dev/null
#
TIMEOUT=30
while running \$JETTY_CFG_PID; do
if (( TIMEOUT-- == 0 )); then
kill -KILL "\$PID" 2>/dev/null
fi
sleep 1
done
fi
#
rm -f "\$JETTY_CFG_PID"
echo OK
;;
restart)
echo -n "Restarting Jetty: "
\$0 stop
\$0 start
;;
check|status)
echo " --- +++ Jetty +++ --- "
echo "JETTY_HOME = \$JETTY_CFG_HOME"
echo "JETTY_PID = \$JETTY_CFG_PID"
echo "JETTY_PORT = \$JETTY_CFG_PORT"
echo "JETTY_LOGS = \$JETTY_CFG_LOGS"
echo "START_INI = \$START_INI"
echo "JAVA_OPTIONS = \${JAVA_OPTIONS[*]}"
echo "JAVA = \$JAVA"
echo "RUN_CMD = \${RUN_CMD[*]}"
echo
[[ -f "\$JETTY_CFG_PID" ]] && echo "Jetty running pid=\$(< "\$JETTY_CFG_PID")" || exit 1
;;
esac
exit 0
EOF
chmod +x /etc/init.d/jetty
/usr/sbin/update-rc.d -f jetty defaults
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment