【问题标题】:Dotcloud supervisord shows error but process is runningDotcloud supervisord 显示错误但进程正在运行
【发布时间】:2012-06-03 11:24:20
【问题描述】:

我的 dotcloud 设置(带有 rabbitmq 的 django-celery)在一周前运行良好 - 进程启动正常,日志也很干净。但是,我最近拒绝了(没有更新任何代码),现在日志显示进程无法启动,即使它们似乎正在运行。

监督日志

dotcloud@hack-default-www-0:/var/log/supervisor$ 更多 supervisord.log 2012-06-03 10:51:51,836 CRIT 将 uid 设置为用户 1000 2012-06-03 10:51:51,836 警告包含额外文件“/etc/supervisor/conf.d/uwsgi.c 解析期间的“关闭” 2012-06-03 10:51:51,836 警告包含额外文件“/home/dotcloud/current/supervi sord.conf”在解析期间 2012-06-03 10:51:51,938 INFO RPC 接口“主管”已初始化 2012-06-03 10:51:51,938 WARN cElementTree 未安装,使用较慢的 XML 解析器 用于 XML-RPC 2012-06-03 10:51:51,938 CRIT 服务器“unix_http_server”在没有任何 HTTP 的情况下运行 认证检查 2012-06-03 10:51:51,946 INFO 守护进程 2012-06-03 10:51:51,947 INFO supervisord 从 pid 144 开始 2012-06-03 10:51:53,128 产生的信息:'celerycam',pid 159 2012-06-03 10:51:53,133 信息产生:“apnsd”与 pid 161 2012-06-03 10:51:53,148 信息产生:“djcelery”,pid 为 164 2012-06-03 10:51:53,168 产生的信息:“uwsgi”,pid 为 167 2012-06-03 10:51:53,245 信息已退出:djcelery(退出状态 1;未预期) 2012-06-03 10:51:53,247 信息已退出:celerycam(退出状态 1;未预期) 2012-06-03 10:51:54,698 产生的信息:带有 pid 176 的“celerycam” 2012-06-03 10:51:54,698 INFO 成功:apnsd 进入 RUNNING 状态,进程有 s 超过 1 秒 (startsecs) 2012-06-03 10:51:54,705 信息产生:“djcelery”,pid 177 2012-06-03 10:51:54,706 INFO 成功:uwsgi 进入 RUNNING 状态,进程有 s 超过 1 秒 (startsecs) 2012-06-03 10:51:54,731 信息已退出:djcelery(退出状态 1;未预期) 2012-06-03 10:51:54,754 信息已退出:celerycam(退出状态 1;未预期) 2012-06-03 10:51:56,760 产生的信息:带有 pid 178 的“celerycam” 2012-06-03 10:51:56,765 信息生成:“djcelery”,pid 为 179 2012-06-03 10:51:56,790 信息已退出:celerycam(退出状态 1;未预期) 2012-06-03 10:51:56,791 信息已退出:djcelery(退出状态 1;未预期) 2012-06-03 10:51:59,798 信息产生:'celerycam' pid 180 2012-06-03 10:52:00,538 信息产生: 'djcelery' 与 pid 181 2012-06-03 10:52:00,565 信息已退出:celerycam(退出状态 1;未预期) 2012-06-03 10:52:00,571 信息放弃:celerycam 进入致命状态,st 太多 艺术重试太快 2012-06-03 10:52:00,573 信息已退出:djcelery(退出状态 1;未预期) 2012-06-03 10:52:01,575 信息放弃:djcelery 进入 FATAL 状态,STA 太多 rt 重试太快 dotcloud@hack-default-www-0:/var/log/supervisor$

djerror 日志:

dotcloud@hack-default-www-0:/var/log/supervisor$ 更多 djcelery_error.log 回溯(最近一次通话最后): 文件“hack/manage.py”,第 2 行,在 从 django.core.management 导入 execute_manager ImportError:没有名为 django.core.management 的模块 回溯(最近一次通话最后): 文件“hack/manage.py”,第 2 行,在 从 django.core.management 导入 execute_manager ImportError:没有名为 django.core.management 的模块 回溯(最近一次通话最后): 文件“hack/manage.py”,第 2 行,在 从 django.core.management 导入 execute_manager ImportError:没有名为 django.core.management 的模块 回溯(最近一次通话最后): 文件“hack/manage.py”,第 2 行,在 从 django.core.management 导入 execute_manager ImportError:没有名为 django.core.management 的模块 dotcloud@hack-default-www-0:/var/log/supervisor$

statusctrl 显示 一些 进程正在运行,但 pid 不同。此外,芹菜功能似乎工作正常。消息处理完毕,我可以在 django 管理界面中看到正在处理的消息(dj celery cam 正在运行)。

#supervisorctl状态 apnsd 运行 pid 225,正常运行时间 0:00:44 celerycam RUNNING pid 224,正常运行时间 0:00:44 djcelery RUNNING pid 226,正常运行时间 0:00:44

Supervisord.conf 文件:

[程序:djcelery] 目录 = /home/dotcloud/current/ 命令 = python hack/manage.py celeryd -E -l info -c 2 stderr_logfile = /var/log/supervisor/%(program_name)s_error.log stdout_logfile = /var/log/supervisor/%(program_name)s.log [程序:celerycam] 目录 = /home/dotcloud/current/ 命令 = python hack/manage.py celerycam stderr_logfile = /var/log/supervisor/%(program_name)s_error.log stdout_logfile = /var/log/supervisor/%(program_name)s.log

http://jefurii.cafejosti.net/blog/2011/01/26/celery-in-virtualenv-with-supervisord/表示问题可能是使用的python不正确,所以我在supervisord文件中明确指定了python。现在它可以工作了,但它没有解释我在上面看到的内容,以及为什么我在上周工作正常的情况下必须更改我的配置。

此外,并非所有的 pid 都在排队​​:

2012-06-03 11:19:03,045 CRIT 服务器“unix_http_server”在没有任何 HTTP 的情况下运行 认证检查 2012-06-03 11:19:03,051 INFO 守护进程 2012-06-03 11:19:03,052 INFO supervisord 从 pid 144 开始 2012-06-03 11:19:04,061 产生的信息:带有 pid 151 的“celerycam” 2012-06-03 11:19:04,066 信息产生:“apnsd”,pid 153 2012-06-03 11:19:04,085 信息产生:“djcelery”,pid 为 155 2012-06-03 11:19:04,104 信息产生:“uwsgi”,pid 156 2012-06-03 11:19:05,271 INFO 成功:celerycam 进入 RUNNING 状态,进程 h 熬夜超过 1 秒(startsecs) 2012-06-03 11:19:05,271 INFO 成功:apnsd 进入 RUNNING 状态,进程有 s 超过 1 秒 (startsecs) 2012-06-03 11:19:05,271 INFO 成功:djcelery 进入 RUNNING 状态,进程 ha s 熬夜超过 1 秒 (startsecs) 2012-06-03 11:19:05,271 INFO 成功:uwsgi 进入 RUNNING 状态,进程有 s 超过 1 秒 (startsecs)

状态显示 celery cam pid 没有排队:

#supervisorctl状态 apnsd 运行 pid 153,正常运行时间 0:06:17 celerycam RUNNING pid 150,正常运行时间 0:06:17 djcelery RUNNING pid 155,正常运行时间 0:06:17

【问题讨论】:

    标签: dotcloud supervisord


    【解决方案1】:

    我的第一个猜测是您使用了错误的 python 二进制文件(systempython,而不是 virtualenvpython),它导致了这个错误(如下),因为systempython 二进制文件没有那个包已安装。

      Traceback (most recent call last):
      File "hack/manage.py", line 2, in 
        from django.core.management import execute_manager
      ImportError: No module named django.core.management
    

    您应该将您的 supervisord.conf 更改为以下内容,以确保您指向正确的 python 版本。

    [program:djcelery]
    directory = /home/dotcloud/current/
    command = /home/dotcloud/env/bin/python hack/manage.py celeryd -E -l info -c 2
    stderr_logfile = /var/log/supervisor/%(program_name)s_error.log
    stdout_logfile = /var/log/supervisor/%(program_name)s.log
    
    [program:celerycam]
    directory = /home/dotcloud/current/
    command = /home/dotcloud/env/bin/python hack/manage.py celerycam
    stderr_logfile = /var/log/supervisor/%(program_name)s_error.log
    stdout_logfile = /var/log/supervisor/%(program_name)s.log
    

    python 路径从python 变为/home/dotcloud/env/bin/python

    我不确定为什么主管说它正在运行,但实际上它没有运行,但希望这一小改动能帮助你清除错误,让一切恢复正常。

    【讨论】:

    • 除了 pid 的差异外,它的工作原理。日志显示 supervisord pid 150、celerycam pid 157、apnsd pid 160、djeclery pid 161、uwsgi pid 164,而 /.dotcloud run hack.worker supervisorctl status 命令显示 apnsd 153、celerycam 150 [日志显示这是pid for supervisord?!], djcelery 155。不寻常的是,这在 dotcloud 之前工作(我没有更改任何内容),但 pid 是错误的,并且完全相同的设置在不同的 dotcloud 部署上崩溃,这就是为什么我最初正在进一步调查(我为此单独发帖)
    • @taras,所以一切正常,唯一的区别是 PID 不匹配?这是一个问题,还是只是一个关于为什么的问题?
    • 一切似乎都正常 - 这是一个问题,为什么,但我感兴趣的原因是因为我在几乎相同的安装中遇到了一些问题,这促使我调查什么是发生在有效的服务器上以及它们之间的任何差异。
    • @Taras pid 不同的原因可能有很多,但很可能是由于虚拟化/chrooting 正在将您的服务与主机上的其他服务分开。这只是一个猜测,但如果一切正常,我就不用担心了。