Created
April 15, 2025 10:56
-
-
Save yangl/94de978e9419b953d1381921b7fc0d9e to your computer and use it in GitHub Desktop.
Revisions
-
yangl created this gist
Apr 15, 2025 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,320 @@ #! /bin/sh APP_NAME="SonarQube" # Location of the pid file. PIDDIR="${PIDDIR-.}" # 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="$PIDDIR/$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 -o args -ww | 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