The fm-api service is not properly started since the status logic is
wrong.
Updated the status logic to drop the regex approach and use the PIDFILE
instead.
There is a confirm_stop logic step which still needs to use the regex
approach because the main process spawns children. Updated the regex
for confirm_stop logic step. Now looking for /usr/bin/pythton3 and
/usr/libexec/platform-python.
Story: 2008454
Task: 42631
Depends-On: I970c2600475e32f2c5fb815738a2fe79f99a5b17
Signed-off-by: Dan Voiculeasa <dan.voiculeasa@windriver.com>
Change-Id: Ia77988ce282ea17de84b89e833ec686df342b3c4
(cherry picked from commit 4d5c6c7f21)
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#! /bin/sh
 | 
						|
#
 | 
						|
# Copyright (c) 2018 Wind River Systems, Inc.
 | 
						|
#
 | 
						|
# SPDX-License-Identifier: Apache-2.0
 | 
						|
#
 | 
						|
### BEGIN INIT INFO
 | 
						|
# Provides:          fm-api
 | 
						|
# Required-Start:    $remote_fs $syslog
 | 
						|
# Required-Stop:     $remote_fs $syslog
 | 
						|
# Default-Start:     3 5
 | 
						|
# Default-Stop:      0 1 2 6
 | 
						|
# Short-Description: Fault Management REST API Service
 | 
						|
# Description:       Fault Management REST API Service
 | 
						|
### END INIT INFO
 | 
						|
 | 
						|
. /etc/init.d/functions
 | 
						|
 | 
						|
# Linux Standard Base (LSB) Error Codes
 | 
						|
RETVAL=0
 | 
						|
GENERIC_ERROR=1
 | 
						|
INVALID_ARGS=2
 | 
						|
UNSUPPORTED_FEATURE=3
 | 
						|
NOT_INSTALLED=5
 | 
						|
NOT_RUNNING=7
 | 
						|
 | 
						|
NAME="fm-api"
 | 
						|
DAEMON="/usr/bin/${NAME}"
 | 
						|
PIDFILE="/var/run/${NAME}.pid"
 | 
						|
CONFIGFILE="/etc/fm/fm.conf"
 | 
						|
 | 
						|
if ! [ -x ${DAEMON} ] ; then
 | 
						|
    logger "${DAEMON} is missing"
 | 
						|
    exit ${NOT_INSTALLED}
 | 
						|
fi
 | 
						|
 | 
						|
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
 | 
						|
export PATH
 | 
						|
 | 
						|
status()
 | 
						|
{
 | 
						|
    pid=`cat $PIDFILE 2>/dev/null`
 | 
						|
    if [ -n "$pid" ]; then
 | 
						|
        if ps -p $pid | grep $NAME &> /dev/null ; then
 | 
						|
            echo "$NAME is running"
 | 
						|
            return 0
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
    echo "$NAME is not running"
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
start ()
 | 
						|
{
 | 
						|
    status >/dev/null
 | 
						|
    if [ $? -eq 0 ]; then
 | 
						|
        echo "$NAME is already running"
 | 
						|
        return 0
 | 
						|
    fi
 | 
						|
 | 
						|
    # Delete stale pidfile, if any
 | 
						|
    rm -f $PIDFILE
 | 
						|
 | 
						|
    start-stop-daemon --start -b --make-pidfile --pidfile $PIDFILE -x ${DAEMON} -- --config-file=${CONFIGFILE}
 | 
						|
    RETVAL=$?
 | 
						|
    if [ ${RETVAL} -eq 0 ]; then
 | 
						|
        status >/dev/null
 | 
						|
        if [ $? -eq 0 ]; then
 | 
						|
            logger -t $NAME "start OK"
 | 
						|
            echo "OK"
 | 
						|
            return 0
 | 
						|
        fi
 | 
						|
        logger -t $NAME "start-stop-daemon returned 0, but status fails"
 | 
						|
        rm -f $PIDFILE
 | 
						|
    fi
 | 
						|
    logger -t $NAME "start failed"
 | 
						|
    return ${GENERIC_ERROR}
 | 
						|
}
 | 
						|
 | 
						|
confirm_stop()
 | 
						|
{
 | 
						|
    local my_processes=`pgrep -l -f "^(python|/usr/bin/python|/usr/bin/python2|/usr/bin/python3|/usr/libexec/platform-python) ${DAEMON}([^\w-]|$)"`
 | 
						|
 | 
						|
    if [ -n "${my_processes}" ]
 | 
						|
    then
 | 
						|
        logger -t $NAME "About to SIGKILL the following: ${my_processes}"
 | 
						|
        pkill -KILL -f "^(python|/usr/bin/python|/usr/bin/python2|/usr/bin/python3|/usr/libexec/platform-python) ${DAEMON}([^\w-]|$)"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
stop ()
 | 
						|
{
 | 
						|
    status >/dev/null
 | 
						|
    if [ $? -ne 0 ]; then
 | 
						|
        echo "$NAME is not running"
 | 
						|
        return 0
 | 
						|
    fi
 | 
						|
 | 
						|
    echo -n "Stopping ${NAME}: "
 | 
						|
    if [ -f $PIDFILE ]; then
 | 
						|
        start-stop-daemon --stop --quiet --retry 3 --oknodo --pidfile $PIDFILE
 | 
						|
    fi
 | 
						|
 | 
						|
    confirm_stop
 | 
						|
    rm -f $PIDFILE
 | 
						|
 | 
						|
    # Confirm status
 | 
						|
    status >/dev/null
 | 
						|
    if [ $? -ne 0 ]; then
 | 
						|
        echo "Stopped"
 | 
						|
        return 0
 | 
						|
    else
 | 
						|
        echo "Failed"
 | 
						|
        return ${GENERIC_ERROR}
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
rc=0
 | 
						|
 | 
						|
case "$1" in
 | 
						|
    start)
 | 
						|
        start
 | 
						|
        rc=$?
 | 
						|
        ;;
 | 
						|
    stop)
 | 
						|
        stop
 | 
						|
        rc=$?
 | 
						|
        ;;
 | 
						|
    restart|force-reload|reload)
 | 
						|
        stop
 | 
						|
        start
 | 
						|
        rc=$?
 | 
						|
        ;;
 | 
						|
    status)
 | 
						|
        status
 | 
						|
        rc=$?
 | 
						|
        ;;
 | 
						|
    *)
 | 
						|
        echo "Usage: $0 {start|stop|force-reload|restart|reload|status}"
 | 
						|
        exit 1
 | 
						|
        ;;
 | 
						|
esac
 | 
						|
 | 
						|
exit $rc
 |