sympa-docker/sympasoap

171 lines
4.3 KiB
Bash
Executable File

#!/bin/sh
#
# sympasoap Sympa Web Interface
#
# Written by IKEDA Soji 2011-10-20
#
# chkconfig: 345 95 05
# description: sympa is a powerful mailing lists management system.
if [ -f /etc/rc.d/init.d/functions ]; then
# Source function library.
. /etc/rc.d/init.d/functions
## Set a flag
use_functions=1
fi
# SympaSoap parameters
# SympaSoap binaries directory
sympafcgidir="/usr/lib/cgi-bin/sympa"
# Sympa config files directory
sympaconf="/etc/sympa/sympa/sympa.conf"
FCGI_CHILDREN=5
FCGI_USER=sympa
FCGI_GROUP=sympa
FCGI_PID_DIR=/var/run/sympa
FCGI_OPTS='-s /var/run/sympa/sympasoap.socket -M 0600 -U www-data'
if [ -e /etc/sysconfig/sympa ]; then
. /etc/sysconfig/sympa
fi
# Current state of SympaSoap
sympasoap_status() {
if [ ${use_functions} ]; then
status sympasoap
else
if [ -f ${FCGI_PID_DIR}/sympasoap.pid ]; then
pid=`cat ${FCGI_PID_DIR}/sympasoap.pid` # | perl -pe0777 'chomp $_; s/\s+/|/g'`
if [ "$pid" != "" ]; then
running=`ps -A | egrep "$pid"`
if [ "$running" != "" ]; then
echo "$1 (pid(s) $pid) is active..."
return 0
else
echo "$1 died, pid file remains."
return 1
fi
fi
fi
echo "$1 is stopped."
return 3
fi
}
# Start SympaSoap
sympasoap_start() {
sympasoap_status > /dev/null
rc=$?
case "$rc" in
3)
echo -n "Starting sympasoap: "
;;
1)
echo -n "Starting sympasoap, overwriting old pid file."
;;
0)
echo "SympaSoap seems active. No action will be taken."
echo "Try \"sympasoap status\" or \"sympasoap restart"\".
return
esac
/usr/bin/spawn-fcgi -F ${FCGI_CHILDREN} -P ${FCGI_PID_DIR}/sympasoap.pid \
-u ${FCGI_USER} -g ${FCGI_GROUP} ${FCGI_OPTS} -- \
${sympafcgidir}/sympa_soap_server.fcgi
}
# Stop SympaSoap
sympasoap_stop() {
if [ -f ${FCGI_PID_DIR}/sympasoap.pid ]; then
runcount=0
pids=`cat ${FCGI_PID_DIR}/sympasoap.pid`
if [ "$pids" != "" ]; then
for pid in "$pids"; do
killcount=0
running=`ps -A | grep "$pid ..* sympasoap"`
while [ "$running" != "" ]; do
if [ $killcount -gt 10 ]; then
if [ ${use_functions} ]; then
failure
else
echo 'failure'
fi
return 3
fi
kill -TERM $pid >/dev/null 2>&1
running=`ps -A | grep "$pid ..* $1\\.pl"`
if [ "$running" = "" ]; then
runcount=`expr $runcount + 1`
break
fi
sleep 2
running=`ps -A | grep "$pid ..* $1\\.pl"`
if [ "$running" = "" ]; then
runcount=`expr $runcount + 1`
break
fi
killcount=`expr $killcount + 1`
done
done
fi
if [ $runcount -gt 0 ]; then
if [ ${use_functions} ]; then
success
else
echo 'success'
fi
else
echo 'died'
fi
echo
else
echo "Module $1.pl not running"
fi
return 0
}
# Check config files
[ -d $sympafcgidir ] || exit 0
[ -f $sympaconf ] || exit 0
# See how we were called.
case "$1" in
start)
if [ ! -f /var/lock/sympasoap ]; then
echo "Starting SympaSoap: "
sympasoap_start
touch /var/lock/sympasoap
echo
else
echo "SympaSoap seems active. No action will be taken."
echo "Try \"sympasoap status\" or \"sympasoap restart"\".
fi
;;
stop)
echo "Stopping SympaSoap: "
sympasoap_stop
if [ -f /var/lock/sympasoap ]; then
rm -f /var/lock/sympasoap
fi
;;
status)
echo "Status of SympaSoap: "
sympasoap_status
;;
restart)
echo "Restarting SympaSoap: "
$0 stop && $0 start
echo
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0