1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | #!/bin/bash # # 3DS Server control script. usage() { cat <<EOF Usage: $0 <options> < command > This script allows to control 3DS Server instances (i.e. start /stop them). OPTIONS: -n The node ID (defaults to 1) The node ID is used to select : - the server configuration in the configuration home directory (e.g. node-1.properties) - the extract directory (e.g. node-1) - the startup log file to write in the out directory (e.g. catalina.out) - the PID file to write in the pid directory (e.g. node.pid) -c The configuration home directory -j The Java options to set (optional). See examples below... -f Keep the started java process in the foreground (optional). -h Show this message COMMANDS: start Starts an 3DS Server node stop Stops an 3DS Server node Java option examples: Set the maximum heap space for the 3DS Server to 1024 MB and the maximum PermGen space to 256 MB: -Xmx1024m -XX:MaxPermSize=256m Enable JSSE (Java Secure Socket Extension) debug output (Check http: //docs .oracle.com /javase/8/docs/technotes/guides/security/jsse/JSSERefGuide .html #Debug for details): -Djavax.net.debug=all EOF } # Set defaults for command line arguments THREEDS_HOME=$( cd $( dirname "$0" )/..; pwd ) THREEDS_CONFIG_HOME= "$THREEDS_HOME/conf/" NODE_ID= "1" JAVA_OPTS= "" DAEMON_MODE= "true" # Read command line arguments while getopts "fn:c:j:h" OPTION do case $OPTION in c) THREEDS_CONFIG_HOME=$OPTARG ;; j) JAVA_OPTS=$OPTARG ;; f) DAEMON_MODE= "false" ;; n) NODE_ID=$OPTARG ;; h) usage exit ;; \?) echo "Unknown option: -$OPTARG" >&2 exit 1 ;; :) echo "Missing option argument for -$OPTARG" >&2 exit 1 ;; *) echo "Unimplemented option: -$OPTARG" >&2 exit 1 ;; esac done shift $(($OPTIND-1)) # Set variables # if THREEDS_CONFIG_HOME is a directory, add / here if [[ -d $THREEDS_CONFIG_HOME ]]; then config_length=${ #THREEDS_CONFIG_HOME} last_char=${THREEDS_CONFIG_HOME:config_length-1:1} [ $last_char != "/" ] && THREEDS_CONFIG_HOME= "$THREEDS_CONFIG_HOME/" ; else echo "$THREEDS_CONFIG_HOME is not a directory" ; exit 1; fi NODE_DIR= "node-$NODE_ID" THREEDS_JAR= "$THREEDS_HOME/lib/nca-3ds-server.jar" PID_FILE= "$THREEDS_HOME/$NODE_DIR/pid/node.pid" CATALINA_OUT= "$THREEDS_HOME/$NODE_DIR/out/catalina.out" CURRENT_DATE=` date + "%Y-%m-%d" ` # Check files and directories assert_file_exists_and_is_readable() { if [[ ! -f $1 || ! -r $1 ]]; then echo "File $1 doesn't exist or is not readable" >&2 exit 1 fi } assert_directory_exists_and_is_writable() { if [[ ! -d $1 || ! -w $1 ]]; then echo "Directory $1 doesn't exist or is not writable" >&2 exit 1 fi } create_directory_if_not_exists() { if [[ ! -d $1 ]]; then mkdir $1 fi } assert_file_exists_and_is_readable $THREEDS_JAR assert_directory_exists_and_is_writable "$THREEDS_HOME" create_directory_if_not_exists "$THREEDS_HOME/$NODE_DIR/" create_directory_if_not_exists "$THREEDS_HOME/$NODE_DIR/pid/" create_directory_if_not_exists "$THREEDS_HOME/$NODE_DIR/out/" # Execute command COMMAND=$1 case $COMMAND in start) if [[ -e $PID_FILE ]]; then PID=$(<$PID_FILE) CURRENT_PID=` ps aux | awk '{print $2}' | grep "^$PID$" ` if [[ "$CURRENT_PID" - eq "$PID" ]]; then echo "3DS Server node seems to be already started (there is a active PID for this node)" exit 0 else rm $PID_FILE fi fi echo "Starting 3DS Server on node $NODE_ID" cd $THREEDS_HOME/$NODE_DIR/ if [[ $DAEMON_MODE = "true" ]]; then java $JAVA_OPTS -jar $THREEDS_JAR --spring.config.name=application,node-$NODE_ID --spring.config.additional-location=$THREEDS_CONFIG_HOME > $CATALINA_OUT 2>&1 & echo $! > $PID_FILE else java $JAVA_OPTS -jar $THREEDS_JAR --spring.config.name=application,node-$NODE_ID --spring.config.additional-location=$THREEDS_CONFIG_HOME fi ;; stop) if [[ ! -e $PID_FILE ]]; then echo "3DS Server node seems not to be started (there is no PID file for this node)" exit 0 fi PID=$(<$PID_FILE) echo "Stopping 3DS Server on node $NODE_ID" kill $PID rm $PID_FILE echo "3DS Server node is stopped" ;; *) usage exit 1 ;; esac |