#!/usr/bin/env sh # ============LICENSE_START======================================================= # ONAP POLICY # ================================================================================ # Copyright (C) 2017-2021 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========================================================= source ${POLICY_HOME}/etc/profile.d/env.sh SNAME="Policy Management" PNAME=policy-management CLASS=org.onap.policy.drools.system.Main function start() { if [ "$DEBUG" = "y" ]; then echo "-- start --" set -x fi um_start if [ $RETVAL -ne 0 ]; then update_monitor off else update_monitor on fi } function preRunning() { if [ "$DEBUG" = "y" ]; then echo "-- preRunning --" set -x fi mkdir -p $_LOGS CP=$(ls $_DIR/lib/*.jar | xargs -I X printf ":%s" X) # pick up any new changes in the environment every time we start source ${POLICY_HOME}/etc/profile.d/env.sh ${POLICY_HOME}/bin/configure-maven # If 'system.properties' exists, convert it into "-D" JVM arguments. # Note that the following also handles property values with spaces. 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 } function exec_start() { if [ "$DEBUG" = "y" ]; then echo "-- exec_start --" set -x fi status echo "$_STATUS" if [ "$_RUNNING" = "1" ]; then exit 1 fi preRunning exec $JAVA_HOME/bin/java ${JVM_OPTIONS} -cp $_DIR/config:$_DIR/lib:$CP ${systemProperties} "$@" $CLASS } # adding timestamp for stdout and stderr function timestamp () { exec awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush(); }' } # unmonitored start, does not change monitor status (immutable) function um_start() { if [ "$DEBUG" = "y" ]; then echo "-- um_start --" set -x fi status if [ "$_RUNNING" = "1" ]; then echo "" RETVAL=1 return fi preRunning if [ -e $_LOGS/$PNAME.out.1 ]; then mv $_LOGS/$PNAME.out.1 $_LOGS/$PNAME.out.2; fi if [ -e $_LOGS/$PNAME.err.1 ]; then mv $_LOGS/$PNAME.err.1 $_LOGS/$PNAME.err.2; fi if [ -e $_LOGS/$PNAME.out ]; then mv $_LOGS/$PNAME.out $_LOGS/$PNAME.out.1; fi if [ -e $_LOGS/$PNAME.err ]; then mv $_LOGS/$PNAME.err $_LOGS/$PNAME.err.1; fi ( exec 200>&- ( ( nohup $JAVA_HOME/bin/java ${JVM_OPTIONS} -cp $_DIR/config:$_DIR/lib:$CP ${systemProperties} "$@" $CLASS ) | timestamp > $_LOGS/$PNAME.out ) 2>&1 | timestamp > $_LOGS/$PNAME.err & ) sleep 5 status echo $_STATUS if [ "$_RUNNING" = "1" ]; then RETVAL=0 else echo "Failed to start" remove_pid_file RETVAL=1 fi } function stop() { if [ "$DEBUG" = "y" ]; then echo "-- stop --" set -x fi um_stop update_monitor off } # unmonitored stop, does not change monitor status (immutable) function um_stop() { if [ "$DEBUG" = "y" ]; then echo "-- um_stop --" set -x fi status if [ "$_RUNNING" = "0" ]; then echo $_STATUS remove_pid_file else if [ -n "${TELEMETRY_PASSWORD}" ]; then http_proxy= timeout 10 curl -k --silent --user ${TELEMETRY_USER}:${TELEMETRY_PASSWORD} -X DELETE https://localhost:${TELEMETRY_PORT}/policy/pdp/engine -o /dev/null else http_proxy= timeout 10 curl -k --silent -X DELETE https://localhost:${TELEMETRY_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 [ "$DEBUG" = "y" ]; then echo "-- status --" set -x fi if [ -f "${_PIDFILE}" ]; then _PID=$(cat "${_PIDFILE}") check_status_of_pid "$_PID" elif [ ${POLICY_DOCKER} ] && _PID=$(pidof -s java); then echo "${_PID}" > ${_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 [ "$DEBUG" = "y" ]; then echo "-- check_status_of_pid --" set -x fi 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 [ "$DEBUG" = "y" ]; then echo "-- remove_pid_file --" set -x fi if [ -f "${_PIDFILE}" ]; then rm "${_PIDFILE}" fi } function update_monitor() { if [ "$DEBUG" = "y" ]; then echo "-- update_monitor --" set -x fi 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 if [ "${DEBUG}" = "y" ]; then echo "-- $0 $* --" set -x fi _DIR=${POLICY_HOME} _LOGS=${POLICY_LOGS} if [ -z "${POLICY_LOGS}" ]; then _LOGS="${POLICY_HOME}"/logs fi CONTROLLER=policy-management-controller RETVAL=0 _PIDFILE=${POLICY_HOME}/PID case "$1" in status) status echo "$_STATUS" ;; start) if flock 200; then start fi 200>>${POLICY_HOME}/etc/monitor/monitor.cfg.lock ;; umstart) um_start ;; exec) exec_start ;; stop) if flock 200; then stop fi 200>>${POLICY_HOME}/etc/monitor/monitor.cfg.lock ;; umstop) um_stop ;; restart) if flock 200; then stop sleep 2 start fi 200>>${POLICY_HOME}/etc/monitor/monitor.cfg.lock ;; *) echo "error: invalid option $@" echo "Usage: $0 status|start|stop|restart" RETVAL=1 ;; esac exit ${RETVAL}