【问题标题】:Django - Deployment with Gunicorn, Nginx and Supervisor, Gunicorn error logDjango - 使用 Gunicorn、Nginx 和 Supervisor 进行部署,Gunicorn 错误日志
【发布时间】:2014-03-31 02:02:33
【问题描述】:

我已经使用 Gunicorn + Nginx + Supervisor 部署了一个 Django 1.6 应用程序。一切正常,但我的 Gunicorn error.log 一直在发送错误。文件很大,每秒都会向日志文件发送错误。

Gunicorn error.log 中的错误:

2014-02-27 14:25:09 [9235] [INFO] Starting gunicorn 18.0
2014-02-27 14:25:09 [9235] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:09 [9235] [ERROR] Retrying in 1 second.
2014-02-27 14:25:10 [9235] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:10 [9235] [ERROR] Retrying in 1 second.
2014-02-27 14:25:11 [9235] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:11 [9235] [ERROR] Retrying in 1 second.
2014-02-27 14:25:12 [9235] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:12 [9235] [ERROR] Retrying in 1 second.
2014-02-27 14:25:13 [9235] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:13 [9235] [ERROR] Retrying in 1 second.
2014-02-27 14:25:14 [9235] [ERROR] Can't connect to ('127.0.0.1', 8000)
2014-02-27 14:25:16 [9250] [INFO] Starting gunicorn 18.0
    2014-02-27 14:25:16 [9250] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:16 [9250] [ERROR] Retrying in 1 second.
2014-02-27 14:25:17 [9250] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:17 [9250] [ERROR] Retrying in 1 second.
2014-02-27 14:25:18 [9250] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:18 [9250] [ERROR] Retrying in 1 second.
2014-02-27 14:25:19 [9250] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:19 [9250] [ERROR] Retrying in 1 second.
2014-02-27 14:25:20 [9250] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:20 [9250] [ERROR] Retrying in 1 second.
2014-02-27 14:25:21 [9250] [ERROR] Can't connect to ('127.0.0.1', 8000)
2014-02-27 14:25:24 [9261] [INFO] Starting gunicorn 18.0
2014-02-27 14:25:24 [9261] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:24 [9261] [ERROR] Retrying in 1 second.
2014-02-27 14:25:25 [9261] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:25 [9261] [ERROR] Retrying in 1 second.
2014-02-27 14:25:26 [9261] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:26 [9261] [ERROR] Retrying in 1 second.
2014-02-27 14:25:27 [9261] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:27 [9261] [ERROR] Retrying in 1 second.
2014-02-27 14:25:28 [9261] [ERROR] Connection in use: ('127.0.0.1', 8000)
2014-02-27 14:25:28 [9261] [ERROR] Retrying in 1 second.
2014-02-27 14:25:29 [9261] [ERROR] Can't connect to ('127.0.0.1', 8000)

我的主管.conf:

[program:mydjangoapp]
command=/home/myuser/virtualenv_mydjangoapp/bin/python manage.py run_gunicorn
directory=/home/myuser/webapps/mydjangoapp
user=myuser
autostart=True
autorestart=True
stdout_logfile = /home/myuser/webapps/mydjangoapp_logs/gunicorn/out.log
stderr_logfile = /home/myuser/webapps/mydjangoapp_logs/gunicorn/err.log

我的 Nginx virtual.conf:

server {
   listen 80;
   client_max_body_size 1G;
   server_name 0.0.0.0;

   keepalive_timeout 5;
   access_log /home/myuser/webapps/mydjangoapp_logs/nginx/access.log;
   error_log /home/myuser/webapps/mydjangoapp_logs/nginx/error.log;

   location /static {
       alias /home/myuser/webapps/mydjangoapp_static;
   }

   location / {
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

       proxy_set_header Host $http_host;
       proxy_redirect off;
       proxy_pass http://localhost:8000;
   }
}

我的 netstat -tulpn:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      2719/python     
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2606/mysqld     
tcp        0      0 0.0.0.0:46028           0.0.0.0:*               LISTEN      2757/beam.smp     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2613/nginx      
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN      2663/epmd       
tcp        0      0 0.0.0.0:85              0.0.0.0:*               LISTEN      2613/nginx      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2469/sshd       
tcp6       0      0 :::5672                 :::*                    LISTEN      2757/beam.smp   
tcp6       0      0 :::22                   :::*                    LISTEN      2469/sshd       
udp        0      0 0.0.0.0:68              0.0.0.0:*                           2395/dhclient3        
udp        0      0 0.0.0.0:123             0.0.0.0:*                           3127/ntpd       
udp        0      0 0.0.0.0:1900            0.0.0.0:*                           2551/minissdpd        
udp6       0      0 ::1:123                 :::*                                3127/ntpd       
udp6       0      0 :::123                  :::*                                3127/ntpd       

我的supervisord.log:

2014-02-27 16:14:56,300 CRIT Supervisor running as root (no user in config file)
2014-02-27 16:14:56,303 CRIT Supervisor running as root (no user in config file)
2014-02-27 16:14:56,413 INFO RPC interface 'supervisor' initialized
2014-02-27 16:14:56,413 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2014-02-27 16:14:56,414 INFO supervisord started with pid 2510
2014-02-27 16:14:56,651 INFO RPC interface 'supervisor' initialized
2014-02-27 16:14:56,651 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2014-02-27 16:14:56,657 INFO daemonizing the supervisord process
2014-02-27 16:14:56,658 INFO supervisord started with pid 2687
2014-02-27 16:14:57,453 INFO spawned: 'celery' with pid 2786
2014-02-27 16:14:57,466 INFO spawned: 'mydjangoapp' with pid 2787
2014-02-27 16:14:57,666 INFO spawned: 'celery' with pid 2842
2014-02-27 16:14:57,673 INFO spawned: 'mydjangoapp' with pid 2846
2014-02-27 16:14:58,471 INFO success: mydjangoapp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-02-27 16:14:58,676 INFO success: mydjangoapp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-02-27 16:15:09,284 INFO success: celery entered RUNNING state, process has stayed up for > than 10 seconds (startsecs)
2014-02-27 16:15:09,313 INFO success: celery entered RUNNING state, process has stayed up for > than 10 seconds (startsecs)
2014-02-27 16:15:13,438 INFO exited: mydjangoapp (exit status 1; not expected)
2014-02-27 16:15:14,445 INFO spawned: 'mydjangoapp' with pid 3164
2014-02-27 16:15:15,830 INFO success: mydjangoapp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-02-27 16:15:20,539 INFO exited: mydjangoapp (exit status 1; not expected)
2014-02-27 16:15:21,546 INFO spawned: 'mydjangoapp' with pid 3264
2014-02-27 16:15:22,549 INFO success: mydjangoapp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-02-27 16:15:27,669 INFO exited: mydjangoapp (exit status 1; not expected)
2014-02-27 16:15:28,676 INFO spawned: 'mydjangoapp' with pid 3275
2014-02-27 16:15:29,679 INFO success: mydjangoapp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-02-27 16:15:35,166 INFO exited: mydjangoapp (exit status 1; not expected)
2014-02-27 16:15:36,173 INFO spawned: 'mydjangoapp' with pid 3286
2014-02-27 16:15:37,175 INFO success: mydjangoapp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-02-27 16:15:42,332 INFO exited: mydjangoapp (exit status 1; not expected)
2014-02-27 16:15:43,339 INFO spawned: 'mydjangoapp' with pid 3295

我的supervisorctl状态输出:

root@li199-188:/var/log# supervisorctl status
celery                           RUNNING    pid 2842, uptime 0:04:05
mydjangoapp                      RUNNING    pid 3815, uptime 0:00:03

关于导致 Gunicorn 日志文件中的错误的任何线索?正如我所说,一切正常,没有问题。唯一的问题是这个日志不断发送错误。

最好的问候,

【问题讨论】:

  • python manage.py run_gunicorn 作为守护进程运行?
  • 看起来像是管理员错误地重新启动了程序。查看主管日志。
  • supervidor 告诉您您的程序正在崩溃。您的程序需要虚拟环境吗?
  • 搜索Connection in use: 错误之前的第一条错误消息。

标签: python django nginx gunicorn supervisord


【解决方案1】:

这通常发生在 gunicorn 进程重试几次时,如果您碰巧在端口(在您的情况下为 8000)上启动了一个进程,而前一个进程即将完成等等。因此,您需要单独终止所有此类进程。

  • 您可以使用netstat -tulpn查看PID
  • kill -9 PID

其他等待过程将在循环等待情况下自动启动。所以反复检查netstat 并杀死它们,直到在该端口上找不到更多进程。

Gunicorn 进程此时应该可以正常工作。

【讨论】:

    【解决方案2】:

    正如错误日志所说,似乎有一个应用程序已经在侦听端口 8000。 也许你是从命令行启动 gunicorn 的,它已经在那个端口运行了。

    您可以使用 netstat -tulpn 来查看是否有一个 python 实例在该端口上侦听并杀死它。

    希望对您有所帮助。

    【讨论】:

    • 我已经添加了我的“netstat -tulpn”输出。 Python 在 PID 2719 上运行,与 supervisord 进程相同。
    猜你喜欢
    • 2015-04-21
    • 2020-12-26
    • 2013-10-05
    • 2015-08-01
    • 1970-01-01
    • 2015-06-02
    • 2013-12-08
    • 2016-11-03
    • 2012-11-22
    相关资源
    最近更新 更多