You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

148 lines
2.7 KiB

#!/bin/bash
if [ -f /etc/default/kamailio ]; then
. /etc/default/kamailio
fi
if [ -f /etc/sysconfig/kamailio ]; then
. /etc/sysconfig/kamailio
fi
RETVAL=1
USER=${KAMAILIO_USER:-kamailio}
GROUP=${KAMAILIO_GROUP:-kamailio}
BIN_FILE=${KAMAILIO_BIN:-/usr/sbin/kamailio}
PID_FILE=${KAMAILIO_PID:-/var/run/kamailio/kazoo-kamailio.pid}
CFG_FILE=${KAMAILIO_CONFIG:-/etc/kazoo/kamailio/kamailio.cfg}
export HOME=${KAMAILIO_HOME:-/var/run/kamailio}
SHM_MEMORY=$((`echo $SHM_MEMORY | sed -e 's/[^0-9]//g'`))
PKG_MEMORY=$((`echo $PKG_MEMORY | sed -e 's/[^0-9]//g'`))
[ $SHM_MEMORY -le 0 ] && SHM_MEMORY=64
[ $PKG_MEMORY -le 0 ] && PKG_MEMORY=8
if test "$DUMP_CORE" = "yes" ; then
ulimit -c unlimited
fi
prepare() {
mkdir -p /var/run/kamailio
chown -R ${USER} /var/run/kamailio
if [ -e ${PID_FILE} ]; then
rm -rf ${PID_FILE}
fi
if [ ! -f /etc/kazoo/kamailio/db/kazoo.db ]; then
KazooDB -init /etc/kazoo/kamailio/kazoodb.sql
fi
RETVAL=$?
}
start() {
cd ${HOME}
check_config
check_fork
if [ "$(whoami)" == "${USER}" ]; then
set -- ${BIN_FILE} -f ${CFG_FILE} -m ${SHM_MEMORY} -M ${PKG_MEMORY} ${EXTRA_OPTIONS} "$@"
exec "$@"
else
set -- ${BIN_FILE} -f ${CFG_FILE} -m ${SHM_MEMORY} -M ${PKG_MEMORY} -u ${USER} -g ${GROUP} ${EXTRA_OPTIONS} "$@"
runuser -s /bin/bash ${USER} -c "$*"
fi
RETVAL=$?
if [ ${RETVAL} -ne 0 ]; then
echo "Failed to start Kamailio!"
RETVAL=1
fi
}
stop() {
killall ${BIN_FILE}
RETVAL=$?
}
restart() {
stop
start
}
reset-restart() {
cd /etc/kazoo/kamailio/dbtext/
stop
head -n1 active_watchers > active_watchers.tmp
mv -f active_watchers.tmp active_watchers
head -n1 watchers > watchers.tmp
mv -f watchers.tmp watchers
head -n1 presentity > presentity.tmp
mv -f presentity.tmp presentity
chown kamailio:daemon *
start
}
status() {
kamcmd dispatcher.list
RETVAL=$?
}
# Do not start kamailio if fork=no is set in the config file
# otherwise the boot process will just stop
check_fork ()
{
if grep -q "^[[:space:]]*fork[[:space:]]*=[[:space:]]*no.*" $CFG_FILE; then
echo "WARNING: fork=no specified in config file"
exit 1
fi
}
check_config ()
{
local ERRORS=$($BIN_FILE -c -f ${CFG_FILE} 2>&1 > /dev/null)
RETVAL=$?
if [ ${RETVAL} -ne 0 ]; then
echo "ERROR: Invalid configuration file ${CFG_FILE}!"
echo -e "\n${ERRORS}\n"
else
echo "No errors found in ${CFG_FILE}"
fi
}
case "$1" in
prepare)
prepare
;;
background)
shift
start $@
;;
start)
shift
start -DD $@
;;
stop)
stop
;;
restart)
restart
;;
reset-restart)
reset-restart
;;
status)
status
;;
check)
check_config
;;
*)
echo $"Usage: $0 {prepare|start|background|stop|restart|reset-restart|status|check|pid}"
esac
exit ${RETVAL}