2011-05-21 27 views
13

Estoy usando nginx con Django en Ubunto 10:04. El problema es cuando reinicio nginx obtengo este error.No se puede reiniciar nginx

sudo /etc/init.d/nginx restart 
Restarting nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 
configuration file /etc/nginx/nginx.conf test is successful 
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use) 
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use) 
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use) 
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use) 

Además, he intentado detener y luego iniciar pero sigo recibiendo el error.

Aquí está la salida de lsof:

sudo lsof -i tcp:80 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 
nginx 27141 root 6u IPv4 245906  0t0 TCP *:www (LISTEN) 
nginx 27142 nobody 6u IPv4 245906  0t0 TCP *:www (LISTEN) 

Si mato el proceso con PID 27141 funciona. Sin embargo, me gustaría llegar al final de por qué no puedo simplemente reiniciar.

Aquí está la nginx.conf:

worker_processes 1; 

user nobody nogroup; 
pid /tmp/nginx.pid; 
error_log /tmp/nginx.error.log; 

events { 
    worker_connections 1024; 
    accept_mutex off; 
} 

http { 
    include mime.types; 
    default_type application/octet-stream; 
    access_log /tmp/nginx.access.log combined; 
    sendfile on; 

    upstream app_server { 
     # server unix:/tmp/gunicorn.sock fail_timeout=0; 
     # For a TCP configuration: 
     server 127.0.0.1:8000 fail_timeout=0; 
    } 

    server { 
     listen 80 default; 
     client_max_body_size 4G; 
     server_name _; 

     keepalive_timeout 5; 

     # path for static files 
     root /home/apps/venvs/app1/app1; 

     location/{ 
      # checks for static file, if not found proxy to app 
      try_files $uri @proxy_to_app; 
     } 

     location @proxy_to_app { 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 

      proxy_pass http://app_server; 
     } 

     error_page 500 502 503 504 /500.html; 
     location = /500.html { 
      root /path/to/app/current/public; 
     } 
    } 
} 

¿Alguna idea?

+0

es este repetible? ¿Qué dicen tus archivos de registro? – Mat

+1

El registro de errores muestra lo mismo. Sí, es repetible – ErnieP

+0

Probablemente, el script de inicio no funciona. Mire adentro /etc/init.d/ngnix y vea cómo detiene ngnix. Puede que no le guste que haya especificado la ubicación del archivo pid (o incluso el usuario/grupo para ejecutarlo). Las secuencias de comandos init a menudo quieren manejar esto por sí mismas, y a menudo esperan que el archivo pid resida en algún lugar de/var/run /. – nos

Respuesta

31

Probar:

$ sudo fuser -k 80/tcp ; sudo /etc/init.d/nginx restart 
+1

Descripción de la página de manual del fusor: "fuser muestra los PID de procesos utilizando los archivos o sistemas de archivos especificados" (léase: sockets) – kelorek

+1

Esto funciona, pero la votación negativa no aborda la causa raíz. –

2

daemontools partir nginx con éxito, a continuación, daemonizes nginx, y luego daemontools intenta iniciar nginx otra vez, sin éxito, de detectar un error en el registro.

La solución a este problema es desactivar el modo daemon en la sección principal de la nginx.conf:

daemon apagado;

sitio: http://wiki.nginx.org/CoreModule

+0

MUCHAS GRACIAS !! Estaba cansado de los errores de enlace. – user1071840

1

cansado con problemas nginx reinicio y "dirección" en uso fallos. Decidió hacerlo funcionar de una vez por todas.

Agregado de una sola línea en la parada final y la acción de reinicio en el archivo /etc/init.d/nginx

nginx -s quit 

lo que se ve ahora como (y asegúrese de que la carpeta está en nginx variable PATH, de otro modo la ruta completa)

stop) 
    echo -n "Stopping $DESC: " 
    start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ 
     --exec $DAEMON || true 
    echo "$NAME." 
    nginx -s quit 
    ;; 

restart|force-reload) 
    echo -n "Restarting $DESC: " 
    start-stop-daemon --stop --quiet --pidfile \ 
     /var/run/$NAME.pid --exec $DAEMON || true 
    nginx -s quit 
    sleep 1 
    test_nginx_config 
    start-stop-daemon --start --quiet --pidfile \ 
     /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true 
    echo "$NAME." 
    ;; 

Espero que esta solución funcione para otros.

0

Siempre pruebe config primero, mostrará errores de sintaxis y duplicar líneas y señalarte allí.

nginx -t 

Verás registros que te muestran qué está causando la falla.

0

Es porque no se reinicia como root.

Cambiar a root:

sudo -i 

Reiniciar:

service nginx restart 

O:

/etc/init.d/nginx restart 
Cuestiones relacionadas