#!/bin/bash
# chkconfig: - 81 15
# description: crab_job daemon
# skip strongbash header
. /etc/rc.d/init.d/functions
set -eu  # !!! /etc/rc.d/init.d/functions не совместима с -eu

PROGNAME="crab_job daemon"
PROG="crab_job_daemon"
LOCKFILE="/var/lock/subsys/$PROG"
STOPFILE="/var/run/${PROG}.stop"
# TODO0 при стопе создавать файл STOPFILE
# при этом демон должен перестать запускать новые задачи
# дождаться выполнения всех запущенных задач и выйти


start() {
	local pid
	echo -n $"Starting $PROGNAME: "
	rm -f "${STOPFILE}"
	set +eu
	status -p "/var/run/$PROG.pid" &>/dev/null && set -eu && return 0
	set -eu
	setsid /opt/fox_utils/crab_job daemon >>/var/log/$PROG.log 2>&1 & disown -a
	RETVAL=$?
	pid=$!
	if [ "$RETVAL" = '0' ]; then
		echo $pid >/var/run/$PROG.pid
		touch $LOCKFILE
	fi
	[ "$RETVAL" != "0" ] && rm -f $LOCKFILE /var/run/$PROG.pid
	return $RETVAL
}

stop() {
	echo -n $"Stopping $PROGNAME: "
	touch "${STOPFILE}"
	if [ -s /var/run/$PROG.pid ]; then
		local n=0
		while [ -d "/proc/$(</var/run/$PROG.pid)/" ]; do
			touch "${STOPFILE}"
			echo -n '.'
			sleep 1
			n="$((n+1))"
			[ "$n" = "10" ] && kill "$(</var/run/$PROG.pid)"
			[ "$n" -ge "20" ] && kill -TERM "$(</var/run/$PROG.pid)"
		done
	fi
	RETVAL=0
	rm -f $LOCKFILE /var/run/$PROG.pid
	return $RETVAL
}

echo_result() {
	if [ "$1" = '0' ]; then
		echo_success
	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
	;;
status)
	echo "Статус работы демона:"
	set +eu
	status -p /var/run/$PROG.pid
	RETVAL=$?
	set -eu
	;;
*)
	echo $"Usage: $0 {start|stop|status|restart|condrestart}"
	exit 255
	;;
esac
exit $RETVAL

