149 lines
3.7 KiB
Plaintext
149 lines
3.7 KiB
Plaintext
# iAnywhere Solutions, Inc. One Sybase Drive, Dublin, CA 94568, USA
|
|
# Copyright (c) 2001-2008, iAnywhere Solutions, Inc. Portions copyright (c)
|
|
# 1988-2008, Sybase, Inc. All rights preserved. All unpublished rights reserved.
|
|
|
|
svc_t_iface_load()
|
|
##################
|
|
# get interface to tool
|
|
# Allow $1 to fall back on global variable DBSVC_TYPE
|
|
{
|
|
local svc_tool_iface
|
|
if [ -n "$1" ]; then
|
|
svc_tool_iface=`tolower $1`
|
|
else
|
|
svc_tool_iface=`tolower ${DBSVC_TYPE}`
|
|
fi
|
|
. "${DBSVC_DIR}/dbsvc_scripts/svc_t_${svc_tool_iface}"
|
|
}
|
|
|
|
svc_t_iface_init()
|
|
##################
|
|
# $1 : DBSVC_TYPE
|
|
{
|
|
svc_t_iface_load $1
|
|
svc_t_init
|
|
}
|
|
|
|
# Multiple instances of our tools may be running as services.
|
|
# Need to take into account the command line given to each tool,
|
|
# to find the right one.
|
|
# The following finds the pid of the process with the command line that
|
|
# matches the one we are looking for.
|
|
# Returns:
|
|
# sets PROCID and echoes back the pid of the process
|
|
svc_t_getpid()
|
|
##############
|
|
{
|
|
# get our command line and "hash" it into something that
|
|
# matches the format of the commandline in /proc/<pid>/cmdline,
|
|
# with grep-unfriendly characters removed
|
|
local pcmdline
|
|
local CMD=`svc_t_toolname`
|
|
local TCMD=`echo "$SVC_TOOL_CMDLINE" | sed 's/ /\x00/g' | sed 's/-//g' | sed 's/\"//g'`
|
|
local pid=$PROCID
|
|
PROCID=
|
|
if [ ! -z "$pid" ]; then
|
|
# maybe we're here a second time ... check last time's PID
|
|
PRFILE="/proc/"$pid"/cmdline"
|
|
if [ -r $PRFILE ]; then
|
|
pcmdline=`cat $PRFILE | sed 's/-//g' | sed 's/ //g' `
|
|
RET=`echo $pcmdline | grep -v dbsvc | grep -v '/etc/init.d/SA_' | grep $TCMD 2>/dev/null`
|
|
if [ "$RET" != "" ]; then
|
|
RET=`grep $CMD $PRFILE`
|
|
if [ "$RET" != "" ]; then
|
|
PROCID=$pid
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
if [ "$PROCID" = "" ] && [ "$PIDFILEN" != "" ]; then
|
|
# check the pid specified in the PIDFILE first to see if we have a match
|
|
if [ -f "$PIDFILEN" ]; then
|
|
pid=`cat "$PIDFILEN"`
|
|
PRFILE="/proc/"$pid"/cmdline"
|
|
if [ -r $PRFILE ]; then
|
|
pcmdline=`cat $PRFILE | sed 's/-//g' | sed 's/ //g' `
|
|
RET=`echo $pcmdline | grep -v dbsvc | grep -v '/etc/init.d/SA_' | grep $TCMD 2>/dev/null`
|
|
if [ "$RET" != "" ]; then
|
|
RET=`grep $CMD $PRFILE`
|
|
if [ "$RET" != "" ]; then
|
|
PROCID=$pid
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
if [ "$PROCID" = "" ]; then
|
|
# need to do it the hard way - check all of the /proc/.../ directories
|
|
for i in `ls -U -p /proc | grep /`; do
|
|
PRFILE="/proc/"$i"cmdline"
|
|
if [ -r $PRFILE ]; then
|
|
pcmdline=`cat $PRFILE | sed 's/-//g' | sed 's/ //g' `
|
|
RET=`echo $pcmdline | grep -v dbsvc | grep -v '/etc/init.d/SA_' | grep $TCMD 2>/dev/null`
|
|
if [ "$RET" != "" ]; then
|
|
RET=`grep $CMD $PRFILE`
|
|
if [ "$RET" != "" ]; then
|
|
PROCID=`echo $i | awk -F "/" '{print $1}'`
|
|
break
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
echo $PROCID
|
|
}
|
|
|
|
svc_t_process_cmdline_add_ud()
|
|
##############################
|
|
# in: cmdline
|
|
# out: add -ud if not already there
|
|
{
|
|
local MY_CMDLINE=$*
|
|
|
|
# add -ud if not there
|
|
local SAW_UD=0
|
|
while [ ! -z "$1" ]; do
|
|
case $1 in
|
|
-ud )
|
|
SAW_UD=1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ $SAW_UD -eq 0 ]; then
|
|
MY_CMDLINE="$MY_CMDLINE -ud"
|
|
fi
|
|
|
|
echo "$MY_CMDLINE"
|
|
}
|
|
svc_t_status()
|
|
##############
|
|
# Most tools check status by verifying the process is still running
|
|
{
|
|
local procid=`svc_t_getpid`
|
|
|
|
if [ -z "$procid" ]; then
|
|
false
|
|
else
|
|
true
|
|
fi
|
|
echo $?
|
|
}
|
|
|
|
svc_t_stopcmd()
|
|
###############
|
|
# Most tools stop by sending a HUP signal
|
|
{
|
|
local procid=`svc_t_getpid`
|
|
[ -n "$procid" ] && kill -HUP ${procid}
|
|
}
|
|
|
|
svc_t_checkbinary()
|
|
###################
|
|
{
|
|
# some validation
|
|
[ ! -r `svc_t_toolpath` ] && output_msg "${INF_BINARYNOTFOUND}" # ${DBSVC_TYPE}
|
|
}
|
|
|