mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-12 18:46:24 +05:00
200 lines
5.1 KiB
Bash
Executable File
200 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: opensips
|
|
# Required-Start: $syslog $network $local_fs $time
|
|
# Required-Stop: $syslog $network $local_fs
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: Start the OpenSIPS SIP server
|
|
# Description: Start the OpenSIPS SIP server
|
|
### END INIT INFO
|
|
#
|
|
# TODO:
|
|
# The following fields should be added (and completed):
|
|
# Should-Start: postgresql mysql radius
|
|
# Should-Stop: postgresql mysql radius
|
|
|
|
PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
|
DAEMON=/usr/sbin/opensips
|
|
NAME=opensips
|
|
DESC=opensips
|
|
TUTDIR=/usr/share/cgrates/tutorials/osips/$NAME
|
|
SCRIPTNAME=$TUTDIR/etc/init.d/$NAME
|
|
TMP_DIR=/tmp/cgr_osipsnative/$NAME
|
|
CFGFILE=$TUTDIR/etc/$NAME/opensips.cfg
|
|
M4CFGFILE=/etc/opensips/opensips.m4
|
|
M4ARCHIVEDIR=/etc/opensips/archive
|
|
HOMEDIR=$TMP_DIR/run/opensips
|
|
PIDFILE=$HOMEDIR/$NAME.pid
|
|
DEFAULTS=$TUTDIR/etc/default/opensips
|
|
RUN_OPENSIPS=no
|
|
|
|
if [ ! -d $HOMEDIR ]; then
|
|
mkdir -p $HOMEDIR
|
|
chown -R $USER:$GROUP $HOMEDIR
|
|
fi
|
|
|
|
# Do not start opensips 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.*" $CFGFILE; then
|
|
echo "Not starting $DESC: fork=no specified in config file; run /etc/init.d/opensips debug instead"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_opensips_config ()
|
|
{
|
|
# Check if opensips configuration is valid before starting the server
|
|
set +e
|
|
out=$($DAEMON -c 2>&1 > /dev/null)
|
|
retcode=$?
|
|
set -e
|
|
if [ "$retcode" != '0' ]; then
|
|
echo "Not starting $DESC: invalid configuration file!"
|
|
echo -e "\n$out\n"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
create_radius_seqfile ()
|
|
{
|
|
# Create a radius sequence file to be used by the radius client if
|
|
# radius accounting is enabled. This is needed to avoid any issue
|
|
# with the file not being writable if opensips first starts as user
|
|
# root because DUMP_CORE is enabled and creates this file as user
|
|
# root and then later it switches back to user opensips and cannot
|
|
# write to the file. If the file exists before opensips starts, it
|
|
# won't change it's ownership and will be writable for both root
|
|
# and opensips, no matter what options are chosen at install time
|
|
RADIUS_SEQ_FILE=/var/run/opensips/opensips_radius.seq
|
|
if [ -d /var/run/opensips ]; then
|
|
chown ${USER}:${GROUP} /var/run/opensips
|
|
|
|
if [ ! -f $RADIUS_SEQ_FILE ]; then
|
|
touch $RADIUS_SEQ_FILE
|
|
fi
|
|
|
|
chown ${USER}:${GROUP} $RADIUS_SEQ_FILE
|
|
chmod 660 $RADIUS_SEQ_FILE
|
|
fi
|
|
}
|
|
|
|
test -f $DAEMON || exit 0
|
|
|
|
# Load startup options if available
|
|
if [ -f $DEFAULTS ]; then
|
|
. $DEFAULTS || true
|
|
fi
|
|
|
|
if [ "$RUN_OPENSIPS" != "yes" ]; then
|
|
echo "OpenSIPS not yet configured. Edit /etc/default/opensips first."
|
|
exit 0
|
|
fi
|
|
|
|
set -e
|
|
|
|
S_MEMORY=$((`echo $S_MEMORY | sed -e 's/[^0-9]//g'`))
|
|
P_MEMORY=$((`echo $P_MEMORY | sed -e 's/[^0-9]//g'`))
|
|
[ -z "$USER" ] && USER=opensips
|
|
[ -z "$GROUP" ] && GROUP=opensips
|
|
[ $S_MEMORY -le 0 ] && S_MEMORY=32
|
|
[ $P_MEMORY -le 0 ] && P_MEMORY=32
|
|
|
|
if test "$DUMP_CORE" = "yes" ; then
|
|
# set proper ulimit
|
|
ulimit -c unlimited
|
|
|
|
# directory for the core dump files
|
|
# COREDIR=/home/corefiles
|
|
# [ -d $COREDIR ] || mkdir $COREDIR
|
|
# chmod 777 $COREDIR
|
|
# echo "$COREDIR/core.%e.sig%s.%p" > /proc/sys/kernel/core_pattern
|
|
fi
|
|
|
|
OPTIONS="-f $CFGFILE -P $PIDFILE -m $S_MEMORY -M $P_MEMORY -u $USER -g $GROUP -w $HOMEDIR"
|
|
|
|
case "$1" in
|
|
start|debug)
|
|
check_opensips_config
|
|
create_radius_seqfile
|
|
|
|
if [ "$1" != "debug" ]; then
|
|
check_fork
|
|
fi
|
|
|
|
# dirs under /var/run can go away on reboots.
|
|
mkdir -p "$HOMEDIR"
|
|
chmod 775 "$HOMEDIR"
|
|
chown "$USER:$GROUP" "$HOMEDIR" >/dev/null 2>&1 || true
|
|
|
|
# Generate config from M4
|
|
if [ -f $M4CFGFILE ]; then
|
|
m4 -Q $M4CFGFILE >$CFGFILE.tmp
|
|
if [ $? != 0 ]; then
|
|
echo "Cannot process m4 macro"
|
|
rm "$CFGFILE.tmp"
|
|
exit 1
|
|
fi
|
|
|
|
[ -e $CFGFILE ] || touch $CFGFILE
|
|
|
|
# compare configs
|
|
if [ `md5sum $CFGFILE|awk '{print $1}'` != `md5sum $CFGFILE.tmp|awk '{print $1}'` ]; then
|
|
mkdir -p "$M4ARCHIVEDIR"
|
|
mv "$CFGFILE" "$M4ARCHIVEDIR/$NAME.cfg-`date +%Y%m%d_%H%M%S`"
|
|
fi
|
|
|
|
mv "$CFGFILE.tmp" "$CFGFILE"
|
|
chown $USER:$GROUP $CFGFILE
|
|
chmod 640 $CFGFILE
|
|
fi
|
|
|
|
echo -n "Starting $DESC: $NAME"
|
|
start-stop-daemon --start --quiet --pidfile $PIDFILE \
|
|
--exec $DAEMON -- $OPTIONS || echo -n " already running"
|
|
echo "."
|
|
;;
|
|
stop)
|
|
echo -n "Stopping $DESC: $NAME"
|
|
start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
|
|
--exec $DAEMON
|
|
echo "."
|
|
;;
|
|
restart|force-reload)
|
|
check_opensips_config
|
|
create_radius_seqfile
|
|
|
|
echo -n "Restarting $DESC: $NAME"
|
|
start-stop-daemon --oknodo --stop --quiet --pidfile \
|
|
$PIDFILE --exec $DAEMON
|
|
sleep 1
|
|
start-stop-daemon --start --quiet --pidfile \
|
|
$PIDFILE --exec $DAEMON -- $OPTIONS
|
|
echo "."
|
|
;;
|
|
status)
|
|
echo -n "Status of $DESC: "
|
|
if [ ! -r "$PIDFILE" ]; then
|
|
echo "$NAME is not running."
|
|
exit 3
|
|
fi
|
|
if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then
|
|
echo "$NAME is running."
|
|
exit 0
|
|
else
|
|
echo "$NAME is not running but $PIDFILE exists."
|
|
exit 1
|
|
fi
|
|
;;
|
|
*)
|
|
N=/etc/init.d/$NAME
|
|
echo "Usage: $N {start|stop|restart|force-reload|debug|status}" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|