Last active
December 17, 2015 06:58
-
-
Save leite/5569029 to your computer and use it in GitHub Desktop.
jetty one run installer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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