Here is a start/stop script that I use for my Play! 2.2.x applications.
#!/bin/bash
println() {
echo
echo $1
echo
}
get_or_else() {
if [ "x" = "x$1" ]
then echo $2
else echo $1
fi
}
check_status() {
if [ -f $PID_FILE_PATH ]
then
kill -0 $( cat $PID_FILE_PATH ) 2> /dev/null
echo $?
else
echo 1
fi
}
STARTUP_CONFIGURATION_FILE_PATH=/etc/default/play
if [ ! -f "$STARTUP_CONFIGURATION_FILE_PATH" ]
then
println "Please set STARTUP_CONFIGURATION_FILE_PATH variable in the $0"
exit 1
fi
source $STARTUP_CONFIGURATION_FILE_PATH
if [ ! -d "$BASE_DIR" ]
then
println "Please set BASE_DIR variable in the $STARTUP_CONFIGURATION_FILE_PATH"
exit 1
fi
OPTS="-server"
START_DELAY=3
STOP_DELAY=3
CMD=$BASE_DIR/bin/myapp
PORT=$(get_or_else "$PORT" '9000' )
LISTEN_IP=$(get_or_else "$LISTEN_IP" '0.0.0.0' )
PID_FILE_PATH=$(get_or_else "$PID_FILE_PATH" "$BASE_DIR/play.pid" )
STDOUT_LOG=$(get_or_else "$STDOUT_LOG" '/dev/null' )
HEAP_START_SIZE=$(get_or_else "$HEAP_START_SIZE" '128M' )
HEAP_MAX_SIZE=$(get_or_else "$HEAP_MAX_SIZE" '1024M' )
OPTS="$JAVA_OPTS -Dpidfile.path=$PID_FILE_PATH -J-Xms$HEAP_START_SIZE -J-Xmx$HEAP_MAX_SIZE"
if [ "x" != "x$CONFIGURATION_FILE_PATH" ]
then
OPTS="$OPTS -Dconfig.file=$CONFIGURATION_FILE_PATH"
fi
if [ "x" != "x$LOG_CONFIGURATION_FILE_PATH" ]
then
OPTS="$OPTS -Dlogger.file=$LOG_CONFIGURATION_FILE_PATH"
fi
COMMAND="$CMD $OPTS -Dhttp.address=$LISTEN_IP -Dhttp.port=$PORT"
status() {
if [ 0 -eq $(check_status) ]
then
println "Play! is running: [$( cat $PID_FILE_PATH )]."
else
println "Play! is not running."
fi
}
start() {
if [ 0 -eq $(check_status) ]
then
println "Play! is running. [$( cat $PID_FILE_PATH )]."
else
rm $STDOUT_LOG >/dev/null 2>&1
nohup $COMMAND >>$STDOUT_LOG 2>&1 &
sleep $START_DELAY
if [ 0 -eq $(check_status) ]
then
println "Started."
else
rm $PID_FILE_PATH >/dev/null 2>&1
println "Could not start Play!, please see [$STDOUT_LOG] for more details."
fi
fi
}
stop() {
if [ 0 -eq $(check_status) ]
then
if kill $( cat $PID_FILE_PATH )
then
sleep $STOP_DELAY
if [ 0 -lt $(check_status) ]
then
println "Stopped."
else
println "Could not stop Play! process. Please stop it manually."
fi
else
println "Could not stop process $( cat $PID )."
fi
else
println "Play! is not running."
fi
}
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart')
stop ;
start
;;
'status')
status
;;
*)
echo
echo "Usage: $0 { start | stop | restart | status }"
echo
exit 1
;;
esac
exit 0
To run this script just change value of the CMD=$BASE_DIR/bin/myapp variable in the script and create your configuration file /etc/default/play. Here is an example of configuration file I have.
#Base directory of the play project BASE_DIR=/opt/app/myapp #Path to the file with process ID #PID_FILE_PATH=$BASE_DIR/play.pid #Path to the file, where process output will be redirected STDOUT_LOG=$BASE_DIR/play.out #Play! configuration file CONFIGURATION_FILE_PATH=$BASE_DIR/../myapp.conf #Logging configuration file LOG_CONFIGURATION_FILE_PATH=$BASE_DIR/../logger.xml #Play! port PORT=9090 #Play! host #LISTEN_IP='127.0.0.1' #Additional JVM options #JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n JAVA_OPTS="-DapplyEvolutions.default=true -DapplyDownEvolutions.default=true" #Start size of JVM heap HEAP_START_SIZE=1024M #Maximum size of JVM heap HEAP_MAX_SIZE=1024M
Thanks, Vlad, exactly what I need
ReplyDelete