Я попытался скопировать /etc/init.d/skeleton и изменить его, чтобы запустить программу в фоновом режиме. Я придумал следующее:start-stop-daemon не обнаруживает уже запущенного daemon
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE -b --make-pidfile --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE -b --make-pidfile --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
}
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
У меня есть проблема и несколько вопросов по этому вопросу. Моя проблема заключается в том, что функция запуска запускает демон и возвращает 0 независимо от того, был ли демон запущен. Мой вопрос в том, что -b и -make-pidfile требуется при первом запуске теста. И согласен ли я с предположением, что первая команда в do_stop отправляет сигнал TERM демону, а вторая команда сильно убивает демона? В этом случае мне пришлось бы ждать, пока демона уйдет.