File citadel.init of Package citadel
#!/bin/sh
#
# Copyright (c) 2011 Stefan Jakobs
# Author: Stefan Jakobs
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# based on the template by SuSE Linux and Wilfried Goesgens
#
# /etc/init.d/citadel
#
### BEGIN INIT INFO
# Provides: citadel
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 5
# Default-Stop: 0 1 6
# Short-Description: control citadel server start at boot time
# Description: control citadel server start at boot time
### END INIT INFO
# uncomment this to create coredumps as described in
# http://www.citadel.org/doku.php/faq:mastering_your_os:gdb#how.do.i.make.my.system.produce.core-files
# ulimit -c unlimited
DESC="Citadel Groupware "
NAME=citserver
RUNDIR=/var/run/citadel
DAEMON=/usr/sbin/$NAME
PIDFILE=$RUNDIR/citadel.pid
SENDCOMMAND=/usr/sbin/sendcommand
SETUP=/usr/sbin/citadel-setup
CONFIGURED=/var/lib/citadel/data/citadel.config
# Exit if the package is not installed
[ -x "$DAEMON" ] || { echo "$DAEMON not installed"; exit 1; }
# Read configuration variable file if it is present
[ -r /etc/sysconfig/citadel ] || { echo "citadel sysconfig file is not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 1; fi; }
. /etc/sysconfig/citadel
if [[ -n $CITADEL_HOME_DIR ]]; then
CITADEL_DAEMON_ARGS="$CITADEL_DAEMON_ARGS -h$CITADEL_HOME_DIR"
fi
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num><num>
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
. /etc/rc.status
# Reset status of this service
rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.
case "$1" in
start)
# Check if citserver is allready configured
if [ -f $CONFIGURED ] ; then
echo -n "Starting $DESC"
/sbin/startproc -p $PIDFILE $DAEMON $CITADEL_DAEMON_ARGS \
-l$CITADEL_LOG_FACILITY -x$CITADEL_LOG_LEVEL \
-t$CITADEL_TRACE_FILE
else
echo "Citserver is not configured. Please run: '$0 setup'.";
false
fi
# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Shutting down $DESC"
if ! /sbin/checkproc -p $PIDFILE $DAEMON ; then
rc_status -v
elif $SENDCOMMAND "DOWN" >/dev/null 2>&1 ; then
timer=0
while /sbin/checkproc -p $PIDFILE $DAEMON ; do
rc_status -v
timer=$((timer+1))
sleep 1
if test "$timer" = "10"; then
/sbin/killproc -p $PIDFILE $DAEMON -TERM
# Remember status and be verbose
rc_status -v
fi
if test "$timer" -ge "20"; then
/sbin/killproc -p $PIDFILE $DAEMON -KILL
# Remember status and be verbose
rc_status -v
rm $PIDFILE
fi
done
else
rc_status -v
fi
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start
# Remember status and be quiet
rc_status
;;
try-restart)
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
rc_status
;;
reload|force-reload)
## Signal the daemon to restart
echo -n "Reload $DESC "
$SENDCOMMAND "DOWN 1" 2>&1|grep '^200 '>/dev/null
# Remember status and be verbose
rc_status -v
;;
status)
echo -n "Checking for $DESC "
/sbin/checkproc -p $PIDFILE $DAEMON
# Remember status and be verbose
rc_status -v
;;
setup)
$SETUP
# Remember status and be quiet
rc_status
;;
*)
echo "Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload|setup}"
exit 1
;;
esac