mirror of https://github.com/sipwise/heartbeat.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
278 lines
6.3 KiB
278 lines
6.3 KiB
#! /bin/sh
|
|
#
|
|
# Copyright (c) 2006 International Business Machines
|
|
#
|
|
# This script is modified from the /usr/bin/samadapter script
|
|
# of IBM sam.adapter Software Package
|
|
#
|
|
#
|
|
|
|
LOG_LVL=0
|
|
ONLINE=0
|
|
OFFLINE=3
|
|
HB_BIN_DIR=@HA_LIBDIR@/@HB_PKG@
|
|
TSA_EVENTD=${HB_BIN_DIR}/tsa_eventd
|
|
MSG_NOUNAME='Cannot determine OS - exit.'
|
|
MSG_NOJAVA='Cannot find Java - exit.'
|
|
|
|
UNAME=`uname -s`
|
|
|
|
function logit ()
|
|
{
|
|
if [ $LOG_LVL -ge $1 ]
|
|
then
|
|
logger -i -t $0: "$2"
|
|
fi
|
|
}
|
|
|
|
|
|
# function getValue
|
|
# get the Value string from key in file
|
|
# parameters:
|
|
# $1 File to parse
|
|
# $2 key to search for string
|
|
# $3 ==1, if removal of trailing CR(13) is required
|
|
# return:
|
|
# Value: String after "="
|
|
#
|
|
function getValue ()
|
|
{
|
|
R=$(cat $1 | grep ^$2 | sed s/' '//g | sed s/.*=// | sed s/\"//g )
|
|
if [ -z "$R" ]
|
|
then
|
|
R="Cannot get text for $1="
|
|
fi
|
|
if [ $3 -eq 1 ]
|
|
then
|
|
# remove CR
|
|
RCNT=$(echo $R | wc -c)
|
|
RCNT=`expr $RCNT - 1`
|
|
R=$(echo $R | cut -b1-$RCNT)
|
|
fi
|
|
echo $R
|
|
}
|
|
|
|
|
|
function getJavaPath ()
|
|
{
|
|
JPATH=""
|
|
case "$UNAME" in
|
|
AIX) JPATH=$(find /usr -name "java[1-9][4-9]*" | grep -v 64 | sort -r | head -1)
|
|
;;
|
|
Linux) JPATH=$pfixed/java
|
|
;;
|
|
*) echo $MSG_NOUNAME
|
|
;;
|
|
esac
|
|
if [ -n "$JPATH" ]
|
|
then
|
|
JPATH=$JPATH$1
|
|
fi
|
|
echo $JPATH
|
|
}
|
|
|
|
function getStatus ()
|
|
{
|
|
RC=0
|
|
PID=$(ps ax | grep -v grep | grep "$SAM_EYE_CATCHER" | grep -v " D " | head -1 | sed s/' '*// | cut -f1 -d" ")
|
|
if [ -z "$PID" ]
|
|
then
|
|
echo "Adapter is not running."
|
|
RC=$OFFLINE
|
|
else
|
|
echo "Adapter is running [pid: $PID]."
|
|
RC=$ONLINE
|
|
fi
|
|
return $RC
|
|
}
|
|
|
|
function startEventd ()
|
|
{
|
|
${TSA_EVENTD} -s
|
|
if [ $? -eq 0 ] ; then
|
|
echo "eventd already started."
|
|
return 0
|
|
fi
|
|
${TSA_EVENTD} &
|
|
${TSA_EVENTD} -s
|
|
if [ $? -eq 3 ] ; then
|
|
echo "Can not start eventd."
|
|
exit 3
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
function stopEventd ()
|
|
{
|
|
${TSA_EVENTD} -k
|
|
}
|
|
|
|
function startAdapter ()
|
|
{
|
|
getStatus
|
|
RC=$?
|
|
if [ $RC -eq $OFFLINE ] ; then
|
|
if [ "$UNAME" = AIX ] ; then
|
|
MKTEMP=''
|
|
LSOF=''
|
|
else #linux
|
|
MKTEMP=`whereis mktemp | cut -d' ' -f2 | cut -d' ' -f3`
|
|
LSOF=`whereis lsof | cut -d' ' -f2 | cut -d' ' -f3`
|
|
fi
|
|
rm -f /tmp/$adapter.*
|
|
# Create a tempfile to capture the first few lines of the output
|
|
if [ -n "$MKTEMP" ] ; then
|
|
TMPFILE=`$MKTEMP -q /tmp/$adapter.XXXXXX`
|
|
else
|
|
# It's better to use mktemp, but we don't have it, we make it cryptic
|
|
RNDM=$(echo $RANDOM)
|
|
TMPFILE=/tmp/$adapter.XXXXXX-RNDM
|
|
touch $TMPFILE
|
|
fi
|
|
# set LIBRAY path for jni parts
|
|
NATIVE_LIBPATH=/lib:/usr/lib
|
|
if [ "$UNAME" = "AIX" ] ; then
|
|
export LIBPATH=$plib:$LIBPATH:$NATIVE_LIBPATH
|
|
else
|
|
export LD_LIBRARY_PATH=$plib:$LD_LIBRARY_PATH:$NATIVE_LIBPATH
|
|
fi
|
|
$pjava/bin/java -$SAM_EYE_CATCHER -cp $jars \
|
|
-Djava.security.auth.login.config=$pcfgm/sam.adapter.jaas.properties \
|
|
-Dcom.ibm.eez.adapter.configFile=$ADAPTER_CFG \
|
|
-Dcom.ibm.eez.adapter.configSSL=$pcfgm/sam.adapter.ssl.properties \
|
|
-Djlog.propertyFileDir=$pcfgm \
|
|
-Djlog.propertyFileName=sam.adapter.jlog.properties com.ibm.eez.adapter.EEZAdapterMain 2>&1 \
|
|
| head -1 > $TMPFILE &
|
|
|
|
logit 0 "Started, waiting for $adapter to become ready..."
|
|
|
|
if [ -n "$LSOF" ] ; then
|
|
# Check if the tempfile is closed
|
|
$LSOF 2> /dev/null | grep $TMPFILE > /dev/null 2>&1
|
|
RETCODE=$?
|
|
# If the tempfile is not yet closed, sleep for a second and try again
|
|
while [ $RETCODE -ne 1 ];
|
|
do
|
|
sleep 2
|
|
$LSOF 2> /dev/null | grep $TMPFILE > /dev/null 2>&1
|
|
RETCODE=$?
|
|
done
|
|
else
|
|
sleep 4
|
|
fi
|
|
|
|
# cat the output to the screen and remove the tempfile
|
|
cat $TMPFILE && rm -f $TMPFILE
|
|
echo "$adapter has started."
|
|
logit 0 "$adapter has started."
|
|
RC=0
|
|
else # already online
|
|
echo "$adapter is not started because it is already running on $RUNS_ON_NODE"
|
|
logit 0 "$adapter is not started because it is already running on $RUNS_ON_NODE"
|
|
RC=0
|
|
fi
|
|
return $RC
|
|
}
|
|
|
|
|
|
function stopAdapter()
|
|
{
|
|
rm -f /tmp/$adapter.*
|
|
getStatus
|
|
RC=$?
|
|
if [ $RC -eq $ONLINE ]; then
|
|
HOST_NAME=$(getValue $ADAPTER_CFG "eez-remote-contact-hostname" 1)
|
|
PORT=$(getValue $ADAPTER_CFG "eez-remote-contact-port" 1)
|
|
SSLVAL=$(getValue $ADAPTER_CFG "eez-remote-contact-over-ssl" 1)
|
|
SSL=""
|
|
if [ "$SSLVAL" = "true" ] ; then
|
|
SSL="-ssl"
|
|
fi
|
|
$pjava/bin/java -cp $jars \
|
|
-Djava.security.auth.login.config=$pcfgm/sam.adapter.jaas.properties \
|
|
-Dcom.ibm.eez.adapter.configFile=$ADAPTER_CFG \
|
|
-Dcom.ibm.eez.adapter.configSSL=$pcfgm/sam.adapter.ssl.properties \
|
|
-Djlog.propertyFileDir=$pcfgm \
|
|
-Djlog.propertyFileName=sam.adapter.jlog.properties com.ibm.eez.adapter.EEZAdapterCmd\
|
|
-terminate -host $HOST_NAME -port $PORT $SSL >/dev/null 2>&1
|
|
logit 2 "Waiting 10 seconds after sending stop to $adapter PID $PID..."
|
|
logit 0 "$adapter with PID $PIDSAVE stopped"
|
|
RC=0
|
|
else
|
|
echo "$adapter is not running"
|
|
logit 2 "$adapter is not running"
|
|
RC=0
|
|
fi
|
|
return $RC
|
|
}
|
|
|
|
adapter=samadapter
|
|
SAM_EYE_CATCHER=Dcom.ibm.sam.samadapter
|
|
pprod=IBM/tsamp/sam
|
|
pfixed=/opt/$pprod
|
|
plib=$pfixed/lib
|
|
pcfgm=/etc$pfixed/cfg
|
|
|
|
jars=$plib/eezadapter.jar:$plib/eezmsgs.jar:$plib/eezmsgs_lang.jar:$plib/eezsdk.jar:$plib/eezutils.jar:$plib/evd.jar:$plib/log.jar:$plib/jlog.jar:$plib/jffdc.jar:$plib/tivolicommondir.jar:/usr/sbin/rsct/codebase/rmcapi.jar:/usr/sbin/rsct/codebase:$plib/samrmc.jar:$plib/samfla.jar:$plib/sammsgs.jar:$plib/linuxhafla.jar
|
|
|
|
pit=/var/ibm/tivoli/common
|
|
pitlogcfg=/etc/ibm/tivoli/common/cfg
|
|
peezlogs=eez/logs
|
|
peezffdc=eez/ffdc
|
|
tivoli_common_dir=""
|
|
|
|
if [ -r "$pitlogcfg/log.properties" ] ; then
|
|
# read the tivoli_common_dir attribute
|
|
. $pitlogcfg/log.properties
|
|
fi
|
|
if [ -z "$tivoli_common_dir" ] ; then
|
|
logit 0 "Warning - 'tivoli_common_dir' not specified in $pitlogcfg/log.properties"
|
|
logit 0 "Will use default: $pit"
|
|
tivoli_common_dir=$pit
|
|
fi
|
|
|
|
ADAPTER_CFG=$pcfgm/sam.adapter.properties
|
|
if [ -z "$ADAPTER_CFG" ] ; then
|
|
echo "$adapter configuration '$ADAPTER_CFG' does not exist - exit."
|
|
exit 1
|
|
fi
|
|
|
|
###########################################
|
|
# main begin
|
|
###########################################
|
|
|
|
ACTION=${1}
|
|
RC=0
|
|
PID=""
|
|
RUNS_ON_NODE=""
|
|
|
|
POLICY_FILE=$pcfgm/sam.adapter.conf
|
|
if [ ! -r "$POLICY_FILE" ] ; then
|
|
echo "$POLICY_FILE does not exist - exit."
|
|
fi
|
|
|
|
pjava=$(getJavaPath /jre)
|
|
if [ -z "$pjava" ]
|
|
then
|
|
echo $MSG_NOJAVA
|
|
exit 1
|
|
fi
|
|
|
|
|
|
case ${ACTION} in
|
|
start) startEventd
|
|
startAdapter
|
|
RC=$?
|
|
;;
|
|
stop) stopAdapter
|
|
RC=$?
|
|
stopEventd
|
|
;;
|
|
status) getStatus
|
|
RC=$?
|
|
;;
|
|
esac
|
|
exit $RC
|
|
|