/etc/init.d/nginx recarregar não está funcionando

2

Meu problema anterior revelou que recarregar a configuração do meu proxy reverso nginx do Debian GNU / Linux 6.0 não funciona, enquanto reiniciar ou recarregar diretamente através do binário funciona.

Eu examinei o arquivo /etc/init.d/nginx para ver exatamente o que poderia dar errado, mas como isso é escrito por Sergey Budnevitch do nginx eu não ousei mexer com isso.

O conteúdo da minha versão provavelmente antiga do arquivo:

#!/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 <[email protected]>

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

Eu também não consegui encontrar o arquivo de log log_daemon_msg escreve para.

Aqui é onde eu não sei mais o que fazer; O Google, assim como os sites "Perguntas que talvez já tenham sua resposta", só encontram respostas para as perguntas que solicitam o recurso de recarregamento.

    
por logicBV 04.09.2014 / 16:16

1 resposta

1

(estou ciente de que esta não é uma resposta completa, apenas aconselho como solucionar problemas. Mas ajudou, pelo menos, neste caso)

Duplique e triplique se o nginx não está realmente recarregando, mesmo depois de um reinício (o nginx pode estar preso em um estado não íntegro). É fácil erroneamente pensar que o nginx não seria recarregado.

Veja como você pode verificar:

Note que em muitas configurações padrão, o nginx é - diferente do Apache - sem mencionar um recarregamento em seus logs! Por exemplo. no meu Ubuntus, eu só recebo uma reação nos logs se eu aumentar o nível error_log para 'debug'. Portanto, eu recomendo aplicar algumas pequenas e não ambíguas alterações à sua configuração toda vez que você recarregar. Por exemplo. adicione

add_header X-config-version 0001;

e incrementá-lo antes de cada recarga. Você pode então verificar que a configuração da bruxa que o nginx está usando via

curl -s -I $URL | grep X-config-version

Além disso, verifique a sintaxe de configuração antes de cada tentativa de recarregamento (sim, nginx deve fornecer uma mensagem de erro adequada ao tentar recarregar uma configuração incorreta. Mas ainda assim, você deseja excluir essa causa possível) :

$PATH_TO/nginx  -t

Agora teste a recarga. Para ter certeza, evite os scripts fornecidos pelo sistema operacional (/etc/init.d/nginx, service / invoke-rc.d / reload, ...) e tente os dois métodos oficiais :

$PATH_TO/nginx  -s reload

e / ou

kill  -HUP  $PID_OF_NGINX_MASTER_PROCESS

por exemplo,

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

Se você já provou que o nginx está realmente reiniciando mas não está recarregando, então ... pingue-me e eu tentarei ajudar na resolução de problemas: -)

    
por 06.09.2014 / 17:03