Skip to content

Instantly share code, notes, and snippets.

@kui
Created February 12, 2013 04:16
Show Gist options
  • Save kui/4760198 to your computer and use it in GitHub Desktop.
Save kui/4760198 to your computer and use it in GitHub Desktop.
init script for `mvn tomcat7:run`
#!/bin/bash
# init script for `mvn tomcat7:run`
PROFILE=""
JAVA_HOME="/usr/lib/jvm/java-7-oracle/jre"
M2_HOME="/usr/local/lib/apache-maven/apache-maven-2.2.1"
LOG_FILE="log/catalina.out"
PID_FILE=".run/pid"
JAVA="$JAVA_HOME/bin/java"
MAVEN="$M2_HOME/bin/mvn"
BASE_DIR="$(cd `dirname $0` && cd .. && pwd)"
LOG_FILE="$BASE_DIR/$LOG_FILE"
PID_FILE="$BASE_DIR/$PID_FILE"
do_start(){
if [ -f $PID_FILE ]
then
echo "already started (pid: `cat $PID_FILE`)"
return 1
fi
nohup $MAVEN tomcat7:run --activate-profiles $PROFILE > $LOG_FILE 2>&1 &
echo -n $! > $PID_FILE
SUCCESS_EXPECTED="FrameworkServlet 'dispatcher': initialization completed"
ERROR_EXPECTED="ERROR"
expect <<EOF
spawn tailf -1 $LOG_FILE
set timeout 300
expect {
"$SUCCESS_EXPECTED" {
puts success
}
"$ERROR_EXPECTED" {
puts error
exit 1
} timeout {
puts timeout
exit 1
}
}
EOF
[ ! "$?" = 0 ] && echo error && do_stop
}
do_stop(){
if ! do_status >/dev/null 2>&1
then
echo NOT running
return 5
fi
TIME=4
kill `cat $PID_FILE`
EXIT_STATUS=$?
while [ $TIME -gt 0 ] && [ ! "$EXIT_STATUS" = 0 ]
do
sleep 1
TIME=$(( $TIME - 1 ))
kill `cat $PID_FILE`
EXIT_STATUS=$?
done
if [ $TIME = 0 ]
then
kill -9 `cat $PID_FILE`
EXIT_STATUS=$?
fi
if [ "$EXIT_STATUS" = 0 ]
then
rm "$PID_FILE"
echo stop
else
echo error
return 2
fi
}
do_status(){
if [ -f $PID_FILE ]
then
echo "running (pid `cat $PID_FILE`)"
else
echo "NOT running"
return 3
fi
}
case $1 in
start | stop | status) do_$1 ;;
restart ) do_stop && do_start ;;
* )
echo "`basename $0` {start|stop|restart|status}"
exit 4
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment