#!/bin/bash MAIN_CLASS=descend.admin.Server jarFile=Descend-1.10.3.jar applicationsDeploymentPath=/opt/applications applicationName=S6_Descend thisApplicationPath=$applicationsDeploymentPath/$applicationName libDir=$thisApplicationPath/lib distDir=$thisApplicationPath/dist runDir=$thisApplicationPath/run logFile=$thisApplicationPath/logs/${applicationName}-GENERAL.log pidFile=$runDir/${applicationName}.pid jarToLoad=$distDir/$jarFile JAVA_CMD=/opt/software/jdk1.8.0_241/bin/java appPort=1235 MAX_MEMORY=2560m MIN_MEMORY=256m MIN_PERM=256m MAX_PERM=512m keystore=$thisApplicationPath/certs/IMGHTTP_2026.pfx keypass=$(cat $thisApplicationPath/certs/p12.pass) NodeIP=85.112.179.22 cd "$thisApplicationPath" || { echo "Failed to change directory to $thisApplicationPath" exit 1 } function check_status { if [ ! -f "$pidFile" ]; then return 1 fi pid=$(tail -1 "$pidFile" 2>/dev/null) if [ -z "$pid" ]; then return 1 fi if ps -p "$pid" > /dev/null 2>&1; then if netstat -an | grep ":$appPort" | grep LISTEN > /dev/null; then return 0 else # Process running but port not listening - partial failure return 1 fi else # Process not running return 1 fi } function check_pid { if [ ! -f "$pidFile" ]; then return 1 fi pid=$(tail -1 "$pidFile" 2>/dev/null) if [ -z "$pid" ]; then return 1 fi if ps -p "$pid" > /dev/null 2>&1; then return 0 else return 1 fi } function stop_process { echo "Checking if process is running..." check_pid if [ $? -eq 0 ]; then pid=$(tail -1 "$pidFile") echo "Process running with pid $pid, stopping..." kill "$pid" # Wait for process to die gracefully for i in {1..10}; do sleep 1 if ! ps -p "$pid" > /dev/null 2>&1; then echo "Process stopped gracefully." break fi done # If app doesn't die after normal kill, force kill if ps -p "$pid" > /dev/null 2>&1; then echo "Process did not stop, sending SIGKILL..." kill -9 "$pid" sleep 1 fi # Clean up PID file > "$pidFile" echo "Process killed and PID file cleared." else echo "Process not running." fi } function start_process { if [ "$2" != "" ]; then MAIN_CLASS="$2" echo "Using custom main class: $MAIN_CLASS" else echo "Using default main class: $MAIN_CLASS" fi echo "Building CLASSPATH..." CLASSPATH="$jarToLoad:" for file in "$libDir"/*.jar; do CLASSPATH="${CLASSPATH}${file}:" done echo "Starting Descend process..." ulimit -n 65535 nohup $JAVA_CMD \ -Djavax.net.ssl.keyStoreType=pkcs12 \ -Djavax.net.ssl.keyStore="$keystore" \ -Djavax.net.ssl.keyStorePassword="$keypass" \ -cp "$CLASSPATH" \ -Xmx$MAX_MEMORY -Xms$MIN_MEMORY \ -XX:PermSize=$MIN_PERM -XX:MaxPermSize=$MAX_PERM \ -DAPPNAME=$applicationName \ -Djava.rmi.server.hostname=$NodeIP \ -Dcom.sun.management.jmxremote=true \ -Dcom.sun.management.jmxremote.port=$appPort \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=true \ "$MAIN_CLASS" > "$logFile" 2>&1 & echo $! > "$pidFile" sleep 5 check_pid if [ $? -eq 0 ]; then echo "Process started with pid $(tail -1 $pidFile)" nohup curl -u "admincontrol:tuow90MNW" \ http://servercs6.msgtoolbox.com/smsadm/synced/scendadmin/descendsmpp/activateall.php \ > /dev/null 2>&1 & exit 0 else echo "Process failed to stay up." stop_process exit 1 fi } #Main case "$1" in start) start_process "$@" ;; stop) stop_process ;; status) check_status if [ $? -eq 0 ]; then echo "Process running with pid $(tail -1 "$pidFile")" exit 0 else echo "Process not running" exit 3 fi ;; restart) stop_process start_process "$@" ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 1 ;; esac