| #!/bin/bash |
| |
| ### |
| # ============LICENSE_START======================================================= |
| # ONAP POLICY |
| # ================================================================================ |
| # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. |
| # ================================================================================ |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # ============LICENSE_END========================================================= |
| ## |
| |
| SNAME="Policy Management" |
| PNAME=policy-management |
| CLASS=org.onap.policy.drools.system.Main |
| |
| |
| function start() { |
| um_start |
| if [[ ${RETVAL} != 0 ]]; then |
| update_monitor off |
| else |
| update_monitor on |
| fi |
| } |
| |
| # unmonitored start, does not change monitor status (immutable) |
| function um_start() { |
| status |
| if [ "$_RUNNING" = "1" ]; then |
| echo $_STATUS |
| RETVAL=0 |
| return |
| fi |
| mkdir -p $_DIR/logs |
| if [ -e $_DIR/logs/$PNAME.out.1 ]; then mv $_DIR/logs/$PNAME.out.1 $_DIR/logs/$PNAME.out.2; fi |
| if [ -e $_DIR/logs/$PNAME.err.1 ]; then mv $_DIR/logs/$PNAME.err.1 $_DIR/logs/$PNAME.err.2; fi |
| if [ -e $_DIR/logs/$PNAME.out ]; then mv $_DIR/logs/$PNAME.out $_DIR/logs/$PNAME.out.1; fi |
| if [ -e $_DIR/logs/$PNAME.err ]; then mv $_DIR/logs/$PNAME.err $_DIR/logs/$PNAME.err.1; fi |
| CP=$(ls $_DIR/lib/*.jar | xargs -I X printf ":%s" X) |
| |
| # If 'system.properties' exists, convert it into JVM arguments. |
| # Note that the following also handles property values with spaces. |
| IFS=$'\n' |
| systemProperties=($( |
| if [[ -f $_DIR/config/system.properties ]] ; then |
| sed -n -e 's/^[ \t]*\([^ \t#]*\)[ \t]*=[ \t]*\(.*\)$/-D\1=\2/p' \ |
| $_DIR/config/system.properties |
| fi |
| )) |
| |
| cd $_DIR |
| ( |
| if [[ "${cfg}" != "" ]] ; then |
| # need to make sure that we don't pass the lock file descriptor |
| # to subprocesses |
| exec {cfg}>&- |
| fi |
| nohup $JAVA_HOME/bin/java -Dkie.maven.settings.custom=$_DIR/config/kie_settings.xml -Dlog4j.configuration=file:$_DIR/config/log4j.properties -cp $_DIR/config:$_DIR/lib:$CP "${systemProperties[@]}" "$@" $CLASS > >( while read line; do echo "$(date): ${line}"; done > $_DIR/logs/$PNAME.out) 2> >( while read line; do echo "$(date): ${line}"; done > $_DIR/logs/$PNAME.err) & |
| |
| _PID=$! |
| echo $_PID > $_PIDFILE |
| ) |
| sleep 5 |
| status |
| echo $_STATUS |
| if [ "$_RUNNING" = "1" ]; then |
| RETVAL=0 |
| else |
| echo "Failed to start" |
| remove_pid_file |
| RETVAL=1 |
| fi |
| } |
| |
| function stop() { |
| um_stop |
| update_monitor off |
| } |
| |
| # unmonitored stop, does not change monitor status (immutable) |
| function um_stop() { |
| status |
| if [ "$_RUNNING" = "0" ]; then |
| echo $_STATUS |
| remove_pid_file |
| else |
| if [[ -n ${ENGINE_MANAGEMENT_PASSWORD} ]]; then |
| http_proxy= curl --silent --user ${ENGINE_MANAGEMENT_USER}:${ENGINE_MANAGEMENT_PASSWORD} -X DELETE http://localhost:${ENGINE_MANAGEMENT_PORT}/policy/pdp/engine -o /dev/null |
| else |
| http_proxy= curl --silent -X DELETE http://localhost:${ENGINE_MANAGEMENT_PORT}/policy/pdp/engine -o /dev/null |
| fi |
| sleep 5 |
| echo "Stopping $SNAME..." |
| _PID_TO_KILL=$_PID; |
| echo "$SNAME (pid=${_PID_TO_KILL}) is stopping..." |
| kill -TERM $_PID_TO_KILL 2> /dev/null |
| sleep 5 |
| check_status_of_pid $_PID_TO_KILL |
| if [ "$_RUNNING" = "1" ]; then |
| kill -TERM $_PID_TO_KILL |
| fi |
| while [ "$_RUNNING" = "1" ]; do |
| sleep 2 |
| check_status_of_pid $_PID_TO_KILL |
| done |
| remove_pid_file |
| echo "$SNAME has stopped." |
| fi |
| RETVAL=0 |
| } |
| |
| function status() { |
| if [ -f "${_PIDFILE}" ]; then |
| _PID=`cat "${_PIDFILE}"` |
| check_status_of_pid $_PID |
| else |
| _STATUS="$SNAME (no pidfile) is NOT running" |
| _RUNNING=0 |
| fi |
| if [[ $_RUNNING = 1 ]]; then |
| RETVAL=0 |
| else |
| RETVAL=1 |
| fi |
| } |
| |
| |
| function check_status_of_pid () |
| { |
| if [ -n "$1" ] && kill -0 $1 2>/dev/null ; then |
| _STATUS="$SNAME (pid $1) is running" |
| _RUNNING=1 |
| else |
| _STATUS="$SNAME (pid $1) is NOT running" |
| _RUNNING=0 |
| fi |
| } |
| |
| function remove_pid_file () |
| { |
| if [ -f "${_PIDFILE}" ]; then |
| rm "${_PIDFILE}" |
| fi |
| } |
| |
| function update_monitor() { |
| STATUS=$1 |
| if [[ -f ${POLICY_HOME}/etc/monitor/monitor.cfg ]]; then |
| /bin/sed -i.bak \ |
| -e "s/^${CONTROLLER}=.*/${CONTROLLER}=${STATUS}/g" \ |
| ${POLICY_HOME}/etc/monitor/monitor.cfg |
| fi |
| } |
| |
| |
| # main |
| |
| _DIR=${POLICY_HOME} |
| CONTROLLER=policy-management-controller |
| |
| RETVAL=0 |
| |
| _PIDFILE=${POLICY_HOME}/PID |
| |
| case "$1" in |
| status) |
| status |
| echo "$_STATUS" |
| ;; |
| start) |
| if flock ${cfg} ; then |
| start |
| fi {cfg}>>${POLICY_HOME}/etc/monitor/monitor.cfg.lock |
| ;; |
| umstart) |
| um_start |
| ;; |
| stop) |
| if flock ${cfg} ; then |
| stop |
| fi {cfg}>>${POLICY_HOME}/etc/monitor/monitor.cfg.lock |
| ;; |
| umstop) |
| um_stop |
| ;; |
| restart) |
| if flock ${cfg} ; then |
| stop |
| sleep 2 |
| start |
| fi {cfg}>>${POLICY_HOME}/etc/monitor/monitor.cfg.lock |
| ;; |
| *) |
| echo "error: invalid option $@" |
| echo "Usage: $0 status|start|stop|restart" |
| RETVAL=1 |
| ;; |
| esac |
| |
| exit ${RETVAL} |