#!/bin/bash
# chkconfig: - 81 15
# description: roscomnadzor download daemon

. /etc/rc.d/init.d/functions
. /usr/local/Reductor/etc/const

RETVAL=1
prog="Reductor Roscomandzor Download Daemon"
PROG="rknd"
LOCKFILE="/var/lock/subsys/$PROG"
PIDFILE=/var/run/$PROG.pid 
LOGFILE=/var/log/reductor/$PROG.log

pid_not_empty() {
	[ -n "$(grep -v ^$ $PIDFILE 2>/dev/null)" ]
}

check_pidfile() {
	if [ -s $PIDFILE ]; then
		read pids < $PIDFILE
		for pid in $pids; do
			if [ -d /proc/$pid/ ]; then
				echo "$PROG already run with pid $pid"
				return 255
			fi
		done
		if [ -z "$pids" ]; then
			rm -f $PIDFILE
		fi
	fi
}

kill_by_pidfile() {
	if [ -s $PIDFILE ]; then
		read pids < $PIDFILE
		pids_check="$pids"
		for pid in $pids; do
			kill $pid
			sleep 0.1
			if [ -d /proc/$pid/ ]; then
				echo "Lucky $PROG $pid, but -KILL"
				kill -KILL $pid
			fi
			if [ ! -d /proc/$pid ]; then
				pids_check="${pids_check#$pid}"
			fi
		done
		if [ -z "${pids_check// /}" ]; then
			rm -f $PIDFILE $LOCKFILE
		else
			return 1
		fi
	fi
}

start() {
	echo -n $"Starting $prog: "
	mkdir -p $LOGDIR
	if ! check_pidfile; then
		check_pidfile &>/dev/null
		return $?
	fi
	setsid $BINDIR/$PROG &>$LOGFILE & disown -a
	RETVAL=$?
	if [ "$RETVAL" = '0' ]; then
	 	touch $LOCKFILE
		sleep 1
	else
		rm -f $LOCKFILE $PIDFILE
	fi
	status -p $PIDFILE $PROG	
	return $RETVAL
}

stop() {
	echo -n $"Stopping $prog: "
	if status -p $PIDFILE $PROG; then
		kill_by_pidfile
		RETVAL=$?
	fi
	status -p $PIDFILE $PROG
	return $RETVAL
}

echo_result() {
	if [ "$1" = '0' ]; then
		echo_success
	elif [ "$1" = '255' ]; then
		echo_passed
	else
		echo_failure
	fi
	echo
	return $1
}

# See how we were called.
case "$1" in
	start)
		start
		RETVAL=$?
		echo_result $RETVAL
		;;
	stop)
		stop
		RETVAL=$?
		echo_result $RETVAL
		;;
	restart)
		stop
		RETVAL=$?
		echo_result $RETVAL
		start
		RETVAL=$?
		echo_result $RETVAL
		;;
	condrestart)
		[ -e "$LOCKFILE" ] && restart
		RETVAL=$?
		;;
	status)
		status -p /var/run/$PROG.pid $PROG
		RETVAL=$?
		;;
	*)
		echo $"Usage: $0 {start|stop|status|restart|condrestart}"
		exit 1
		;;
esac
exit $RETVAL
