0

/etc/init.d/skeleton をコピーして修正し、バックグラウンドでプログラムを起動しようとしました。私は次のことを思いつきました:

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 を返すことです。私の質問は、最初の --test 開始時に -b と --make-pidfile が必要かどうかです。そして、do_stop の最初のコマンドが TERM シグナルをデーモンに送信し、2 番目のコマンドがデーモンを強制的に強制終了するという仮定は正しいですか? この場合、デーモンが終了するのを待つ必要があります。

4

1 に答える 1

1

私のスクリプトは解釈されたスクリプトなので、私の問題は --exec でした start-stop-daemon は、インタープリターが実行されているだけだったため、実行中のこの名前のプログラムを見つけることができませんでした。--exec を除いて --startas を使用してこれを修正しました。

于 2015-06-22T12:30:14.890 に答える