182 lines
3.9 KiB
Bash
182 lines
3.9 KiB
Bash
#!/bin/sh
|
|
|
|
# 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.
|
|
|
|
#
|
|
# provide boiler-plate start/stop/status/restart for the generated service script
|
|
# all required vars should be set in script
|
|
#
|
|
|
|
parse_cl_options_svc()
|
|
######################
|
|
{
|
|
case "$1" in
|
|
start | stop | restart )
|
|
ACTION=$1
|
|
;;
|
|
status )
|
|
ACTION=sa_status
|
|
;;
|
|
* )
|
|
echo "${INF_USAGE}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
#
|
|
# Implementation of start, stop, status, restart
|
|
#
|
|
|
|
start()
|
|
#######
|
|
{
|
|
local cmd="`svc_t_toolspath` ${SVC_TOOL_CMDLINE}"
|
|
local status=`svc_t_status`
|
|
local sd_cmd=$START_DAEMON
|
|
local pr_num=${PRIORITY##[-+]}
|
|
local pr_sign=${PRIORITY%%[0-9]*}
|
|
|
|
[ -z $pr_sign ] && pr_sign="+"
|
|
|
|
if [ $status -eq 0 ]; then
|
|
$LOG_WARNING_MSG "${INF_ALREADYRUNNING}"
|
|
exit 0
|
|
fi
|
|
echo "${INF_STARTING}"
|
|
|
|
if is_redhat; then
|
|
export NICELEVEL="$PRIORITY"
|
|
if [ "$ACCOUNT" != "daemon" ]; then
|
|
. /etc/init.d/functions
|
|
sd_cmd="daemon --user $ACCOUNT"
|
|
fi
|
|
$sd_cmd $cmd
|
|
elif is_suse; then
|
|
# leading -/+ required
|
|
local pr=${pr_sign}${pr_num}
|
|
# Can't use "bin32s" wrapper with startproc
|
|
cmd="`svc_t_toolpath` ${SVC_TOOL_CMDLINE}"
|
|
|
|
if [ "$ACCOUNT" != "daemon" ]; then
|
|
sd_cmd="$sd_cmd -n $pr -u $ACCOUNT"
|
|
else
|
|
sd_cmd="$sd_cmd -n $pr"
|
|
fi
|
|
$sd_cmd $cmd
|
|
elif is_ubuntu; then
|
|
local nice_cmd=""
|
|
if [ "$ACCOUNT" != "daemon" ]; then
|
|
sd_cmd="sudo -u $ACCOUNT"
|
|
$sd_cmd $cmd
|
|
if [ $? -eq 0 ]; then
|
|
sudo renice $PRIORITY `svc_t_getpid` 2>&1 >/dev/null
|
|
fi
|
|
else
|
|
# prepend nice command if necessary
|
|
if [ `eval expr "$pr_num + 0"` != 0 ]; then
|
|
nice_cmd="-n $PRIORITY"
|
|
fi
|
|
$sd_cmd $nice_cmd $cmd
|
|
fi
|
|
else
|
|
# this case will get used for RedFlag
|
|
local nice_cmd=""
|
|
if [ "$ACCOUNT" != "daemon" ]; then
|
|
sd_cmd="su $ACCOUNT -c"
|
|
else
|
|
sd_cmd="su -c"
|
|
fi
|
|
# prepend nice command if necessary
|
|
if [ `eval expr "$pr_num + 0"` != 0 ]; then
|
|
nice_cmd="nice -n $PRIORITY"
|
|
fi
|
|
$sd_cmd "$nice_cmd $cmd"
|
|
fi
|
|
|
|
# Check if we really started; in some cases the tool will be successfully launched,
|
|
# but an error will occur on startup. On RedHat, "runuser" swallows the return
|
|
# code in this case. Work around this my checking status after starting.
|
|
# This also help customers who have inadvertently given an incorrect command line,
|
|
# since when starting the service they will not see any error messages in the
|
|
# terminal.
|
|
local retcode=$?
|
|
status=`svc_t_status`
|
|
[ $status -ne 0 ] && retcode=$status
|
|
|
|
if [ $retcode -eq 0 ]; then
|
|
$LOG_SUCCESS_MSG
|
|
if [ "$PIDFILEN" != "" ]; then
|
|
# record the pid of the process that we just started
|
|
sudo echo `svc_t_getpid` >$PIDFILEN 2>/dev/null
|
|
fi
|
|
return 0
|
|
else
|
|
$LOG_FAILURE_MSG
|
|
if [ "$PIDFILEN" != "" ]; then
|
|
# if there was a pid file, get rid of it
|
|
if [ -f "$PIDFILEN" ]; then
|
|
sudo rm -f $PIDFILEN 2>/dev/null
|
|
fi
|
|
fi
|
|
return 1
|
|
fi
|
|
} # start
|
|
|
|
stop()
|
|
######
|
|
{
|
|
local status=`svc_t_status`
|
|
|
|
if [ $status -ne 0 ]; then
|
|
$LOG_WARNING_MSG "${INF_NOTRUNNING}"
|
|
exit 0
|
|
fi
|
|
echo "${INF_STOPPING}"
|
|
if [ "$PIDFILEN" != "" ]; then
|
|
# if there was a pid file, get rid of it
|
|
if [ -f "$PIDFILEN" ]; then
|
|
sudo rm -f $PIDFILEN 2>/dev/null
|
|
fi
|
|
fi
|
|
svc_t_stopcmd
|
|
if [ $? -eq 0 ]; then
|
|
$LOG_SUCCESS_MSG
|
|
return 0
|
|
else
|
|
$LOG_FAILURE_MSG
|
|
return 1
|
|
fi
|
|
} # stop
|
|
|
|
sa_status()
|
|
###########
|
|
{
|
|
local status=`svc_t_status`
|
|
|
|
if [ $status -ne 0 ]; then
|
|
$LOG_WARNING_MSG "${INF_CHECKING_NF}"
|
|
if [ "$PIDFILEN" != "" ]; then
|
|
# if there was a pid file, get rid of it
|
|
if [ -f "$PIDFILEN" ]; then
|
|
sudo rm -f $PIDFILEN 2>/dev/null
|
|
fi
|
|
fi
|
|
else
|
|
$LOG_SUCCESS_MSG "${INF_CHECKING_OK}"
|
|
fi
|
|
return $status
|
|
} # sa_status
|
|
|
|
restart()
|
|
#########
|
|
{
|
|
stop
|
|
sleep 5
|
|
start
|
|
|
|
return $?
|
|
}
|