#!/bin/sh
#
# chkconfig: 2345 12 88
# description: natpass server
### BEGIN INIT INFO
# Provides: lwch748@gmail.com
# Required-Start: $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: np-svr
# Description: natpass server
### END INIT INFO

NAME=np-svr
WORKDIR=/opt/natpass
DAEMON=/opt/natpass/bin/$NAME
CONFIG=/opt/natpass/conf/server.yaml
PIDFILE=/var/run/$NAME.pid

wait_for_pid () {
    try=0
    while test $try -lt 35 ; do
        case "$1" in
            'created')
                if [ -f "$2" ] ; then
                    try=''
                    break
                fi
            ;;
            'removed')
                if [ ! -f "$2" ] ; then
                    try=''
                    break
                fi
            ;;
        esac

        echo -n .
        try=`expr $try + 1`
        sleep 1
    done
}

case "$1" in
    start)
        echo -n "Starting $NAME "
        cd $WORKDIR
        nohup $DAEMON -d -pid $PIDFILE -u nobody -conf $CONFIG > /dev/null 2>&1 &
        if [ "$?" != 0 ] ; then
            echo " failed"
            exit 1
        fi
        wait_for_pid created $PIDFILE
        if [ -n "$try" ] ; then
            echo " failed"
            exit 1
        else
            echo " done"
        fi
    ;;
    stop)
        echo -n "Gracefully shutting down $NAME "
        if [ ! -r $PIDFILE ] ; then
            echo "warning, no pid file found - $NAME is not running ?"
            exit 1
        fi
        kill -QUIT `cat $PIDFILE`
        wait_for_pid removed $PIDFILE
        if [ -n "$try" ] ; then
            echo " failed. Use force-quit"
            exit 1
        else
            echo " done"
        fi
    ;;
    status)
        if [ ! -r $PIDFILE ] ; then
            echo "$NAME is stopped"
            exit 0
        fi

        PID=`cat $PIDFILE`
        if ps -p $PID | grep -q $PID; then
            echo "$NAME (pid $PID) is running..."
        else
            echo "$NAME dead but pid file exists"
        fi
    ;;
    force-quit)
        echo -n "Terminating $NAME "
        if [ ! -r $PIDFILE ] ; then
            echo "warning, no pid file found - $NAME is not running ?"
            exit 1
        fi
        kill -TERM `cat $PIDFILE`
        wait_for_pid removed $PIDFILE
        if [ -n "$try" ] ; then
            echo " failed"
            exit 1
        else
            echo " done"
        fi
    ;;
    restart)
        $0 stop
        $0 start
    ;;
    *)
        echo "Usage: $0 {start|stop|status|force-quit|restart}"
        exit 1
    ;;
esac

exit $?