1#!/bin/bash 2# 3# Startup script for Kamailio 4# 5# chkconfig: 345 85 15 6# description: Kamailio (OpenSER) - the Open Source SIP Server 7# 8# processname: kamailio 9# pidfile: /run/kamailio.pid 10# config: /etc/kamailio/kamailio.cfg 11# 12### BEGIN INIT INFO 13# Provides: kamailio 14# Required-Start: $local_fs $network 15# Short-Description: Kamailio (OpenSER) - the Open Source SIP Server 16# Description: Kamailio (former OpenSER) is an Open Source SIP Server released 17# under GPL, able to handle thousands of call setups per second. 18### END INIT INFO 19 20# Source function library. 21. /etc/rc.d/init.d/functions 22 23KAM=/usr/sbin/kamailio 24KAMCFG=/etc/kamailio/kamailio.cfg 25PROG=kamailio 26HOMEDIR=/run/$PROG 27PID_FILE=/run/$PROG/kamailio.pid 28LOCK_FILE=/var/lock/subsys/kamailio 29RETVAL=0 30DEFAULTS=/etc/sysconfig/kamailio 31RUN_KAMAILIO=no 32 33 34# Do not start kamailio if fork=no is set in the config file 35# otherwise the boot process will just stop 36check_fork () 37{ 38 if grep -q "^[[:space:]]*fork[[:space:]]*=[[:space:]]*no.*" $KAMCFG; then 39 echo "Not starting $PROG: fork=no specified in config file; run /etc/init.d/kamailio debug instead" 40 exit 1 41 fi 42} 43 44check_kamailio_config () 45{ 46 # Check if kamailio configuration is valid before starting the server 47 out=$($KAM -c $OPTIONS 2>&1 > /dev/null) 48 retcode=$? 49 if [ "$retcode" != '0' ]; then 50 echo "Not starting $PROG: invalid configuration file!" 51 echo -e "\n$out\n" 52 exit 1 53 fi 54} 55 56 57start() { 58 check_kamailio_config 59 if [ "$1" != "debug" ]; then 60 check_fork 61 fi 62 echo -n $"Starting $PROG: " 63 daemon $KAM $OPTIONS >/dev/null 2>/dev/null 64 RETVAL=$? 65 [ $RETVAL = 0 ] && touch $LOCK_FILE && success 66 echo 67 return $RETVAL 68} 69 70stop() { 71 echo -n $"Stopping $PROG: " 72 killproc -p $PID_FILE 73 RETVAL=$? 74 echo 75 [ $RETVAL = 0 ] && rm -f $LOCK_FILE $PID_FILE 76} 77 78# Load startup options if available 79if [ -f $DEFAULTS ]; then 80 . $DEFAULTS || true 81fi 82 83if [ "$RUN_KAMAILIO" != "yes" ]; then 84 echo "Kamailio not yet configured. Edit $DEFAULTS first." 85 exit 0 86fi 87 88 89SHM_MEMORY=$((`echo $SHM_MEMORY | sed -e 's/[^0-9]//g'`)) 90PKG_MEMORY=$((`echo $PKG_MEMORY | sed -e 's/[^0-9]//g'`)) 91[ -z "$USER" ] && USER=kamailio 92[ -z "$GROUP" ] && GROUP=kamailio 93[ $SHM_MEMORY -le 0 ] && SHM_MEMORY=32 94[ $PKG_MEMORY -le 0 ] && PKG_MEMORY=4 95 96if test "$DUMP_CORE" = "yes" ; then 97 # set proper ulimit 98 ulimit -c unlimited 99 100 # directory for the core dump files 101 COREDIR=/tmp 102 echo "$COREDIR/core.%e.sig%s.%p" > /proc/sys/kernel/core_pattern 103fi 104 105# /run can be a tmpfs 106if [ ! -d $HOMEDIR ]; then 107 mkdir -p $HOMEDIR 108 chown ${USER}:${GROUP} $HOMEDIR 109fi 110 111OPTIONS="-f $KAMCFG -P $PID_FILE -m $SHM_MEMORY -M $PKG_MEMORY -u $USER -g $GROUP $EXTRA_OPTIONS" 112 113 114# See how we were called. 115case "$1" in 116 start|debug) 117 start 118 ;; 119 stop) 120 stop 121 ;; 122 status) 123 status $KAM 124 RETVAL=$? 125 ;; 126 restart) 127 stop 128 start 129 ;; 130 condrestart) 131 if [ -f $PID_FILE ] ; then 132 stop 133 start 134 fi 135 ;; 136 *) 137 echo $"Usage: $PROG {start|stop|restart|condrestart|status|debug|help}" 138 exit 1 139esac 140 141exit $RETVAL 142