2011-05-21 3 views
13

J'utilise nginx avec Django sur Ubunto 10:04. Le problème est quand je redémarre nginx j'obtiens cette erreur.Impossible de redémarrer 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) 

De même, j'ai essayé d'arrêter puis de démarrer mais j'obtiens toujours l'erreur.

est ici la sortie 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 je tue le processus avec PID 27141 cela fonctionne. Cependant, je voudrais aller au fond de pourquoi je ne peux pas simplement faire un redémarrage.

Voici le 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; 
     } 
    } 
} 

Toutes les idées?

+0

est-ce reproductible? Que disent vos fichiers journaux? – Mat

+1

Le journal des erreurs montre la même chose. Oui, c'est répétable. – ErnieP

+0

Probablement le script de démarrage est cassé. Regardez dans /etc/init.d/ngnix et voyez comment ça s'arrête ngnix. Il se peut que vous n'aimiez pas que vous ayez spécifié l'emplacement du fichier pid (ou même l'utilisateur/groupe à exécuter). Les scripts Init veulent souvent gérer eux-mêmes cette fonction, et attendent souvent que le fichier pid se trouve quelque part dans/var/run /. – nos

Répondre

31

Essayez:

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

Description de la page de manuel de fusion: "fuser affiche les PID des processus utilisant les fichiers ou systèmes de fichiers spécifiés" (lire: sockets) – kelorek

+1

Cela fonctionne, mais pas parce qu'il ne s'attaque pas à la cause première. –

2

daemontools à partir nginx avec succès, puis nginx daemonizes, puis daemontools essaie de démarrer nginx à nouveau, sans succès, la connexion d'une erreur dans le journal.

La solution à ce problème consiste à désactiver le mode démon dans la section principale du nginx.conf:

démon hors tension;

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

+0

MERCI BEAUCOUP BEAUCOUP !! J'étais fatigué des erreurs de liaison. – user1071840

1

Fatigué des problèmes de redémarrage nginx et défauts "adresse en cours d'utilisation". Décidé de le faire fonctionner une fois pour toutes.

Ajouté une seule ligne à la butée et l'action de redémarrage dans le fichier /etc/init.d/nginx

nginx -s quit 

il ressemble maintenant (et assurez-vous que le dossier est nginx dans la variable PATH, stipulera le chemin complet)

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." 
    ;; 

Espérons que cette solution fonctionnera pour les autres.

0

Testez toujours votre config en premier, il montrera des erreurs de syntaxe et dupliquer les lignes et vous y pointer.

nginx -t 

Vous verrez des journaux là-bas vous montrant ce qui cause la panne.

0

C'est parce que vous ne redémarrez pas en tant que root.

changement à la racine:

sudo -i 

Restart:

service nginx restart 

Ou:

/etc/init.d/nginx restart 
Questions connexes