File debian.ais-service.aissvc.init of Package ais
#!/bin/bash
# Analytic Information System start/stop script.
# Usually this is put in /etc/init.d (at least on machines SYSV R4 based
# systems) and linked to /etc/rc3.d/S99aissvc and /etc/rc0.d/K01aissvc.
# When this is done the ais service will be started when the machine is
# started and shut down when the systems goes down.
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 70 30
# description: Analytic Information System.
# Comments to support LSB init script conventions
### BEGIN INIT INFO
# Provides: aissvc
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop AIS
# Description: Analytic Information System.
### END INIT INFO
service_startup_timeout=900
user=ais
datadir=/var/lib/ais
bindir=/usr/bin
aissvc=aissvcdevexe
pid_file=$datadir/ais.pid
startup_file=$datadir/AStartup.sl
#
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
. $lsb_functions
else
log_success_msg()
{
echo " SUCCESS! $@"
}
log_failure_msg()
{
echo " ERROR! $@"
}
fi
mode=$1
PATH=/sbin:/usr/sbin:/bin:/usr/bin:$bindir
export PATH
case `echo "testing\c"`,`echo -n testing` in
*c*,-n*) echo_n= echo_c= ;;
*c*,*) echo_n=-n echo_c= ;;
*) echo_n= echo_c='\c' ;;
esac
wait_for_pid () {
verb="$1"
manager_pid="$2" # process ID of the program operating on the pid-file
i=0
avoid_race_condition="by checking again"
while test $i -ne $service_startup_timeout ; do
case "$verb" in
'created')
# wait for a PID-file to pop into existence.
test -s $pid_file && i='' && break
;;
'removed')
# wait for this PID-file to disappear
test ! -s $pid_file && i='' && break
;;
*)
echo "wait_for_pid () usage: wait_for_pid created|removed manager_pid"
exit 1
;;
esac
# if manager isn't running, then pid-file will never be updated
if test -n "$manager_pid"; then
if kill -0 "$manager_pid" 2>/dev/null; then
: # the manager still runs
else
# The manager may have exited between the last pid-file check and now.
if test -n "$avoid_race_condition"; then
avoid_race_condition=""
continue # Check again.
fi
# there's nothing that will affect the file.
log_failure_msg "Manager of pid-file quit without updating file."
return 1 # not waiting any more.
fi
fi
echo $echo_n ".$echo_c"
i=`expr $i + 1`
sleep 1
done
if test -z "$i" ; then
log_success_msg
return 0
else
log_failure_msg
return 1
fi
}
#
# Set pid file if not given
#
if test -z "$pid_file"
then
pid_file=$datadir/`/bin/hostname`.pid
else
case "$pid_file" in
/* ) ;;
* ) pid_file="$datadir/$pid_file" ;;
esac
fi
case "$mode" in
'start')
# Start daemon
echo $echo_n "Starting AIS"
if test -x $bindir/$aissvc
then
nohup $bindir/$aissvc --pidfile $pid_file --user $user $startup_file > /dev/null 2>&1 &
wait_for_pid created $!; return_value=$?
# Make lock for RedHat / SuSE
if test -w /var/lock/subsys
then
touch /var/lock/subsys/aissvc
fi
exit $return_value
else
log_failure_msg "Couldn't find AIS Service ($bindir/$aissvc)"
fi
;;
'stop')
# Stop daemon
# The RedHat / SuSE lock directory to remove
lock_dir=/var/lock/subsys/aissvc
if test -s "$pid_file"
then
aissvc_pid=`cat $pid_file`
echo $echo_n "Shutting down AIS"
kill $aissvc_pid
# aissvc should remove the pid_file when it exits, so wait for it.
wait_for_pid removed "$aissvc_pid"; return_value=$?
# delete lock for RedHat / SuSE
if test -f $lock_dir
then
rm -f $lock_dir
fi
exit $return_value
else
log_failure_msg "AIS PID file could not be found!"
fi
;;
'restart')
# Stop the service and regardless of whether it was
# running or not, start it again.
if $0 stop; then
$0 start
else
log_failure_msg "Failed to stop running server, so refusing to try to start."
exit 1
fi
;;
'status')
# First, check to see if pid file exists
if test -s "$pid_file" ; then
read aissvc_pid < $pid_file
if kill -0 $aissvc_pid 2>/dev/null ; then
log_success_msg "AIS running ($aissvc_pid)"
exit 0
else
log_failure_msg "AIS is not running, but PID file exists"
exit 1
fi
else
# Try to find appropriate aissvc process
aissvc_pid=`pidof $bindir/$aissvc`
if test -z $aissvc_pid ; then
lockfile=/var/lock/subsys/aissvc
if test -f $lockfile ; then
log_failure_msg "AIS is not running, but lock exists"
exit 2
fi
log_failure_msg "AIS is not running"
exit 3
else
log_failure_msg "AIS is running but PID file could not be found"
exit 4
fi
fi
;;
*)
# usage
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0