| #! /bin/sh |
| |
| ### BEGIN INIT INFO |
| # Provides: freediameter |
| # Default-Start: 2 3 4 5 |
| # Default-Stop: 0 1 6 |
| # Required-Start: $remote_fs $syslog |
| # Required-Stop: $remote_fs $syslog |
| # Short-Description: Start freeDiameter daemon at boot time |
| # Description: Start the freeDiameter daemon at boot time. |
| # freeDiameter is an extensible implementation of the Diameter protocol, |
| # designed for Authentication, Authorization and Accounting. Diameter is |
| # an evolution of the RADIUS protocol. |
| ### END INIT INFO# |
| |
| DAEMON=/usr/bin/freeDiameterd |
| CONF=/etc/freeDiameter/freeDiameter.conf |
| NAME=freediameter |
| DESC="freeDiameter daemon" |
| |
| test -x $DAEMON || exit 0 |
| |
| LOGDIR=/var/log/freediameter |
| PIDFILE=/var/run/$NAME.pid |
| DODTIME=30 # Time to wait for the server to die, in seconds |
| # The value is high because we wait for STA answers |
| # before disconnecting the peers. |
| |
| # Include freediameter defaults if available |
| if [ -f /etc/default/freediameter ] ; then |
| . /etc/default/freediameter |
| fi |
| |
| test x"" != x$DAEMON_OPTS || test -f $CONF || exit 0 |
| |
| set -e |
| |
| running_pid() |
| { |
| # Check if a given process pid's cmdline matches a given name |
| pid=$1 |
| name=$2 |
| [ -z "$pid" ] && return 1 |
| [ ! -d /proc/$pid ] && return 1 |
| cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` |
| # Is this the expected child? |
| [ "$cmd" != "$name" ] && return 1 |
| return 0 |
| } |
| |
| running() |
| { |
| # Check if the process is running looking at /proc |
| # (works for all users) |
| |
| # No pidfile, probably no daemon present |
| [ ! -f "$PIDFILE" ] && return 1 |
| # Obtain the pid and check it against the binary name |
| pid=`cat $PIDFILE` |
| running_pid $pid $DAEMON || return 1 |
| return 0 |
| } |
| |
| force_stop() { |
| # Forcefully kill the process |
| [ ! -f "$PIDFILE" ] && return |
| if running ; then |
| kill -15 $pid |
| # Is it really dead? |
| [ -n "$DODTIME" ] && sleep "$DODTIME"s |
| if running ; then |
| kill -9 $pid |
| [ -n "$DODTIME" ] && sleep "$DODTIME"s |
| if running ; then |
| echo "Cannot kill $LABEL (pid=$pid)!" |
| exit 1 |
| fi |
| fi |
| fi |
| rm -f $PIDFILE |
| return 0 |
| } |
| |
| case "$1" in |
| start) |
| echo -n "Starting $DESC: " |
| start-stop-daemon --start --quiet --pidfile $PIDFILE \ |
| --exec $DAEMON -- $DAEMON_OPTS |
| if running ; then |
| echo "$NAME." |
| else |
| echo " ERROR." |
| fi |
| ;; |
| stop) |
| echo -n "Stopping $DESC: " |
| start-stop-daemon --stop --quiet --pidfile $PIDFILE \ |
| --exec $DAEMON |
| echo "$NAME." |
| ;; |
| force-stop) |
| echo -n "Forcefully stopping $DESC: " |
| force_stop |
| if ! running ; then |
| echo "$NAME." |
| else |
| echo " ERROR." |
| fi |
| ;; |
| #reload) |
| # |
| # If the daemon can reload its config files on the fly |
| # for example by sending it SIGHUP, do it here. |
| # |
| # If the daemon responds to changes in its config file |
| # directly anyway, make this a do-nothing entry. |
| # |
| # echo "Reloading $DESC configuration files." |
| # start-stop-daemon --stop --signal 1 --quiet --pidfile \ |
| # /var/run/$NAME.pid --exec $DAEMON |
| #;; |
| force-reload) |
| # |
| # If the "reload" option is implemented, move the "force-reload" |
| # option to the "reload" entry above. If not, "force-reload" is |
| # just the same as "restart" except that it does nothing if the |
| # daemon isn't already running. |
| # check wether $DAEMON is running. If so, restart |
| start-stop-daemon --stop --test --quiet --pidfile \ |
| /var/run/$NAME.pid --exec $DAEMON \ |
| && $0 restart \ |
| || exit 0 |
| ;; |
| restart) |
| echo -n "Restarting $DESC: " |
| start-stop-daemon --stop --quiet --pidfile \ |
| /var/run/$NAME.pid --exec $DAEMON |
| [ -n "$DODTIME" ] && sleep $DODTIME |
| start-stop-daemon --start --quiet --pidfile \ |
| /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS |
| echo "$NAME." |
| ;; |
| status) |
| echo -n "$LABEL is " |
| if running ; then |
| echo "running" |
| else |
| echo " not running." |
| exit 1 |
| fi |
| ;; |
| *) |
| N=/etc/init.d/$NAME |
| # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 |
| echo "Usage: $N {start|stop|restart|force-reload|status|force-stop}" >&2 |
| exit 1 |
| ;; |
| esac |
| |
| exit 0 |