123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- #! /bin/sh
-
- APP_NAME="SonarQube"
-
- # By default, java from the PATH is used, except if SONAR_JAVA_PATH env variable is set
- findjava() {
- if [ -z "${SONAR_JAVA_PATH}" ]; then
- if ! command -v java 2>&1; then
- echo "Java not found. Please make sure that the environmental variable SONAR_JAVA_PATH points to a Java executable"
- exit 1
- fi
- JAVA_CMD=java
- else
- if ! [ -x "${SONAR_JAVA_PATH}" ] || ! [ -f "${SONAR_JAVA_PATH}" ]; then
- echo "File '${SONAR_JAVA_PATH}' is not executable. Please make sure that the environmental variable SONAR_JAVA_PATH points to a Java executable"
- exit 1
- fi
- JAVA_CMD="${SONAR_JAVA_PATH}"
- fi
- }
-
- findjava
-
- # Get the fully qualified path to the script
- case $0 in
- /*)
- SCRIPT="$0"
- ;;
- *)
- PWD=`pwd`
- SCRIPT="$PWD/$0"
- ;;
- esac
-
- # Resolve the true real path without any sym links.
- CHANGED=true
- while [ "X$CHANGED" != "X" ]
- do
- # Change spaces to ":" so the tokens can be parsed.
- SAFESCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
- # Get the real path to this script, resolving any symbolic links
- TOKENS=`echo $SAFESCRIPT | sed -e 's;/; ;g'`
- REALPATH=
- for C in $TOKENS; do
- # Change any ":" in the token back to a space.
- C=`echo $C | sed -e 's;:; ;g'`
- REALPATH="$REALPATH/$C"
- # If REALPATH is a sym link, resolve it. Loop for nested links.
- while [ -h "$REALPATH" ] ; do
- LS="`ls -ld "$REALPATH"`"
- LINK="`expr "$LS" : '.*-> \(.*\)$'`"
- if expr "$LINK" : '/.*' > /dev/null; then
- # LINK is absolute.
- REALPATH="$LINK"
- else
- # LINK is relative.
- REALPATH="`dirname "$REALPATH"`""/$LINK"
- fi
- done
- done
-
- if [ "$REALPATH" = "$SCRIPT" ]
- then
- CHANGED=""
- else
- SCRIPT="$REALPATH"
- fi
- done
-
- # Change the current directory to the location of the script
- cd "`dirname "$REALPATH"`"
-
- LIB_DIR="../../lib"
-
- HAZELCAST_ADDITIONAL="--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED \
- --add-opens=java.base/java.lang=ALL-UNNAMED \
- --add-opens=java.base/java.nio=ALL-UNNAMED \
- --add-opens=java.base/sun.nio.ch=ALL-UNNAMED \
- --add-opens=java.management/sun.management=ALL-UNNAMED \
- --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED"
-
- # Sonar app launching process memory setting
- XMS="-Xms8m"
- XMX="-Xmx32m"
-
- COMMAND_LINE="$JAVA_CMD $XMS $XMX $HAZELCAST_ADDITIONAL -jar $LIB_DIR/sonar-application-@sqversion@.jar"
-
- # Location of the pid file.
- PIDFILE="./$APP_NAME.pid"
-
- # Resolve the location of the 'ps' command
- PSEXE="/usr/bin/ps"
- if [ ! -x "$PSEXE" ]
- then
- PSEXE="/bin/ps"
- if [ ! -x "$PSEXE" ]
- then
- echo "Unable to locate 'ps'."
- echo "Please report this message along with the location of the command on your system."
- exit 1
- fi
- fi
-
- getpid() {
- if [ -f "$PIDFILE" ]
- then
- if [ -r "$PIDFILE" ]
- then
- pid=`cat "$PIDFILE"`
- if [ "X$pid" != "X" ]
- then
- # It is possible that 'a' process with the pid exists but that it is not the
- # correct process. This can happen in a number of cases, but the most
- # common is during system startup after an unclean shutdown.
- # The ps statement below looks for the specific wrapper command running as
- # the pid. If it is not found then the pid file is considered to be stale.
- pidtest=`$PSEXE -p $pid | grep "sonar-application-@sqversion@.jar" | tail -1`
- if [ "X$pidtest" = "X" ]
- then
- # This is a stale pid file.
- rm -f "$PIDFILE"
- echo "Removed stale pid file: $PIDFILE"
- pid=""
- fi
- fi
- else
- echo "Cannot read $PIDFILE."
- exit 1
- fi
- fi
- }
-
- testpid() {
- pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
- if [ "X$pid" = "X" ]
- then
- # Process is gone so remove the pid file.
- rm -f "$PIDFILE"
- pid=""
- fi
- }
-
- console() {
- echo "Running $APP_NAME..."
- getpid
- if [ "X$pid" = "X" ]
- then
- echo $$ > $PIDFILE
- exec $COMMAND_LINE -Dsonar.log.console=true
- else
- echo "$APP_NAME is already running."
- exit 1
- fi
- }
-
- start() {
- echo "Starting $APP_NAME..."
- getpid
- if [ "X$pid" = "X" ]
- then
- exec nohup $COMMAND_LINE >../../logs/nohup.log 2>&1 &
- echo $! > $PIDFILE
- else
- echo "$APP_NAME is already running."
- exit 1
- fi
- getpid
- if [ "X$pid" != "X" ]
- then
- echo "Started $APP_NAME."
- else
- echo "Failed to start $APP_NAME."
- fi
- }
-
- waitforstop() {
- savepid=$pid
- CNT=0
- TOTCNT=0
- while [ "X$pid" != "X" ]
- do
- # Show a waiting message every 5 seconds.
- if [ "$CNT" -lt "5" ]
- then
- CNT=`expr $CNT + 1`
- else
- echo "Waiting for $APP_NAME to exit..."
- CNT=0
- fi
- TOTCNT=`expr $TOTCNT + 1`
-
- sleep 1
-
- testpid
- done
-
- pid=$savepid
- testpid
- if [ "X$pid" != "X" ]
- then
- echo "Failed to stop $APP_NAME."
- exit 1
- else
- echo "Stopped $APP_NAME."
- fi
- }
-
- stopit() {
- echo "Gracefully stopping $APP_NAME..."
- getpid
- if [ "X$pid" = "X" ]
- then
- echo "$APP_NAME was not running."
- else
- kill $pid
- if [ $? -ne 0 ]
- then
- # An explanation for the failure should have been given
- echo "Unable to stop $APP_NAME."
- exit 1
- fi
-
- waitforstop
- fi
- }
-
- forcestopit() {
- getpid
- if [ "X$pid" = "X" ]
- then
- echo "$APP_NAME not running"
- exit 1
- fi
-
- testpid
- if [ "X$pid" != "X" ]
- then
- # start shutdowner from SQ installation directory
- cd "../.."
-
- echo "Force stopping $APP_NAME..."
- ${JAVA_CMD} -jar "lib/sonar-shutdowner-@sqversion@.jar"
-
- waitforstop
- fi
- }
-
- status() {
- getpid
- if [ "X$pid" = "X" ]
- then
- echo "$APP_NAME is not running."
- exit 1
- else
- echo "$APP_NAME is running ($pid)."
- exit 0
- fi
- }
-
- dump() {
- echo "Dumping $APP_NAME..."
- getpid
- if [ "X$pid" = "X" ]
- then
- echo "$APP_NAME was not running."
-
- else
- kill -3 $pid
-
- if [ $? -ne 0 ]
- then
- echo "Failed to dump $APP_NAME."
- exit 1
- else
- echo "Dumped $APP_NAME."
- fi
- fi
- }
-
- case "$1" in
-
- 'console')
- console
- ;;
-
- 'start')
- start
- ;;
-
- 'stop')
- stopit
- ;;
-
- 'force-stop')
- forcestopit
- ;;
-
- 'restart')
- stopit
- start
- ;;
-
- 'status')
- status
- ;;
-
- 'dump')
- dump
- ;;
-
- *)
- echo "Usage: $0 { console | start | stop | force-stop | restart | status | dump }"
- exit 1
- ;;
- esac
-
- exit 0
|