2015-06-21 2 views
0

Я попытался скопировать /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 демону, а вторая команда сильно убивает демона? В этом случае мне пришлось бы ждать, пока демона уйдет.

ответ

1

Моя проблема была --exec, потому что мой скрипт является интерпретированным скриптом. Start-stop-daemon не смог найти программу с этим именем, запущенную с момента запуска интерпретатора. Я исправил это, используя --startas, за исключением --exec.

Смежные вопросы