123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #!/bin/bash
- #
- # This shell script takes care of starting and stopping Geoserver deployed in Apache Tomcat
- # It also handles killing Geoserver in case it doesn’t stop gracefully
- # It uses a PID file to determine the process ID so it should work with multiple Tomcat instances on one server
- # Just copy the script and change $INSTANCE variable to run multiple Geoserver instances
- # Tested on Ubuntu 12.04
- #
- # chkconfig: - 80 20
- #
- ### BEGIN INIT INFO
- # Provides: Geoserver
- # Required-Start: $network $syslog
- # Required-Stop: $network $syslog
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Description: Geoserver service
- # Short-Description: start and stop tomcat
- ### END INIT INFO
- #
- # Author dragan.podvezanec@gmail.com
- #
- # Based on work by Yoryos Valotasios
- # Geoserver configuration section
- INSTANCE=1
- USER=geoserver
- GEOSERVER_DATA_DIR=/home/geoserver/data_dir
- GEOSERVER_HOME=/home/geoserver/geoserver$INSTANCE
- export GEOSERVER_DATA_DIR=$GEOSERVER_DATA_DIR
- export GEOSERVER_HOME=$GEOSERVER_HOME
- # Uncomment this if you need custom logging location
- #export GEOSERVER_LOG_LOCATION=$GEOSERVER_HOME/logs/geoserver.log
- # Java configuration section
- JAVA_HOME=/home/geoserver/jre
- JAVA_OPTS="-Xms256m -Xmx2048m -XX:+UseParallelGC -XX:+UseParallelOldGC"
- CATALINA_PID=/var/run/geoserver$INSTANCE.pid
- export JAVA_HOME=$JAVA_HOME
- export JAVA_OPTS=$JAVA_OPTS
- export CATALINA_PID=$CATALINA_PID
- export PATH=$JAVA_HOME/bin:$PATH
- # End configuration section
- # Number of seconds to wait after nicely requesting stop
- SHUTDOWN_WAIT=10
- geoserver_pid(){
- echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep $GEOSERVER_HOME | grep -v grep | awk '{ print $2 }'`
- }
- start() {
- pid=$(geoserver_pid)
- if [ -n "$pid" ]
- then
- echo "Geoserver is already running (pid: $pid)"
- else
- echo "Starting Geoserver"
- touch $CATALINA_PID
- chown $USER $CATALINA_PID
- /bin/su -p -s /bin/sh $USER $GEOSERVER_HOME/bin/startup.sh
- echo "Started Geoserver with next variables:"
- echo "GEOSERVER_HOME=$GEOSERVER_HOME"
- echo "GEOSERVER_DATA_DIR=$GEOSERVER_DATA_DIR"
- echo "Geoserver PID is: $(geoserver_pid)"
- fi
- return 0
- }
- stop() {
- pid=$(geoserver_pid)
- if [ -n "$pid" ]
- then
- /bin/su -p -s /bin/sh $USER $GEOSERVER_HOME/bin/shutdown.sh
- echo -n "Stopping Geoserver"
- let kwait=$SHUTDOWN_WAIT
- count=0;
- until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
- do
- echo -n ".";
- sleep 1
- let count=$count+1;
- done
- if [ $count -gt $kwait ]; then
- echo "process is still running after $SHUTDOWN_WAIT seconds, killing process"
- kill $pid
- sleep 3
- # if it’s still running use kill -9
- if [ `ps -p $pid | grep -c $pid` -gt '0' ]; then
- echo "process is still running, using kill -9"
- kill -9 $pid
- sleep 3
- fi
- fi
- if [ `ps -p $pid | grep -c $pid` -gt '0' ]; then
- echo "process is still running, I give up"
- else
- # success, delete PID file
- rm $CATALINA_PID
- fi
- else
- echo "Geoserver $INSTANCE is not running"
- fi
- return 0
- }
- case $1 in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- status)
- pid=$(geoserver_pid)
- if [ -n "$pid" ]
- then
- echo "Geoserver $INSTANCE is running with pid: $pid"
- else
- echo "Geoserver $INSTANCE is not running"
- fi
- ;;
- esac
- exit 0
|