/etc/init.d/nginx перезагрузка, не работающая

Моя более ранняя проблема показала, что, перезагружая конфигурацию моего GNU/Linux Debian 6.0 прокси реверса nginx не работают, в то время как перезапуск или перезагрузка непосредственно через двоичный файл действительно работают.

Я изучил/etc/init.d/nginx файл для наблюдения то, что точно могло бы пойти не так, как надо там, но так как это записано Sergey Budnevitch из nginx, я не смел играть с ним.

Содержание моей, вероятно, старой версии файла:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $network $remote_fs $local_fs
# Required-Stop:     $network $remote_fs $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Stop/start nginx
### END INIT INFO

# Author: Sergey Budnevitch <sb@nginx.com>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=nginx
NAME=nginx
CONFFILE=/etc/nginx/nginx.conf
DAEMON=/usr/sbin/nginx
DAEMON_ARGS="-c $CONFFILE"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

[ -x $DAEMON ] || exit 0

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /lib/init/vars.sh

. /lib/lsb/init-functions

do_start()
{
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
        $DAEMON_ARGS
    RETVAL="$?"
    return "$RETVAL"
}

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="$?"
    rm -f $PIDFILE
    return "$RETVAL"
}

do_reload() {
    #
    start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    return "$RETVAL"
}

do_configtest() {
    if [ "$#" -ne 0 ]; then
        case "$1" in
            -q)
                FLAG=$1
                ;;
            *)
                ;;
        esac
        shift
    fi
    $DAEMON -t $FLAG -c $CONFFILE
    RETVAL="$?"
    return $RETVAL
}

do_upgrade() {
    OLDBINPIDFILE=$PIDFILE.oldbin

    do_configtest -q || return 6
    start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    sleep 1
    if [ -f $OLDBINPIDFILE -a -f $PIDFILE ]; then
        start-stop-daemon --stop --signal QUIT --quiet --pidfile $OLDBINPIDFILE --name $NAME
        RETVAL="$?"
    else
        echo $"Upgrade failed!"
        RETVAL=1
        return $RETVAL
    fi
}

case "$1" in
    start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
        do_start
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
    stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
        status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
        ;;
  configtest)
        do_configtest
        ;;
  upgrade)
        do_upgrade
        ;;
  reload|force-reload)
        log_daemon_msg "Reloading $DESC" "$NAME"
        do_reload
        log_end_msg $?
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_configtest -q || exit $RETVAL
        do_stop
        case "$?" in
            0|1)
                do_start
                case "$?" in
                    0) log_end_msg 0 ;;
                    1) log_end_msg 1 ;; # Old process is still running
                    *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
            *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload|upgrade|configtest}" >&2
        exit 3
        ;;
esac

exit $RETVAL

Я также не мог найти, что файл журнала log_daemon_msg пишет в.

Это - то, где я не знаю, что еще сделать; Google, а также это располагает "Вопросы, которые могут уже иметь Ваш ответ" - предложения только находят ответы на вопросы, просящие функцию перезагрузки.

2
задан 23 May 2017 в 15:41
1 ответ

(Я знаю, что это не полный ответ, только посоветуйте, как устранять неполадки. Но это помогло, по крайней мере, в данном случае)

-Двойная и тройная проверка, что nginx действительно не перезагружается, даже после перезагрузки (nginx может застрять в нездоровом состоянии). Легко ошибиться, думая, что nginx не перезагрузится.

Вот как можно проверить:

Обратите внимание, что во многих конфигурациях по умолчанию nginx - кроме Apache - не упоминает перезагрузку в своих логах! Например, на моем Ubuntus, я получаю реакцию в логах только в том случае, если повышаю уровень error_log error_log до 'debug'. Поэтому я рекомендую при каждой перезагрузке вносить в конфигурацию небольшие и однозначные изменения. Например, добавлять

add_header X-config-version 0001;

и увеличивать его перед каждой перезагрузкой. Также, проверьте синтаксис конфига перед каждой попыткой перезагрузки (да, nginx should должен выдавать правильное сообщение об ошибке при попытке перезагрузки плохого конфига. Но всё же, вы хотите исключить эту возможную причину):

$PATH_TO/nginx  -t

Теперь проверьте перезагрузку. Чтобы быть уверенным, избегайте скриптов, предоставляемых ОС (/etc/init.d/nginx, service/invoke-rc.d/reload, ...) и попробуйте два официальных метода:

$PATH_TO/nginx  -s reload

и/или

kill  -HUP  $PID_OF_NGINX_MASTER_PROCESS

например

kill  -HUP  `cat /var/run/nginx.pid`

Если вы доказали, что nginx действительно перезагружается, но не перезагружается, то ... пингуйте мне, и я попробую помочь вам в диагностике :-)

.
1
ответ дан 3 December 2019 в 12:51

Теги

Похожие вопросы