首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新启动运行监督and程序的停靠程序,保存pid文件,并在重新启动时导致错误。

重新启动运行监督and程序的停靠程序,保存pid文件,并在重新启动时导致错误。
EN

Stack Overflow用户
提问于 2015-02-13 18:57:22
回答 1查看 1.6K关注 0票数 2

我有一个码头工人,通过监督管理django芹菜工人,程序设置非常简单

代码语言:javascript
复制
[program:celery_priority]
command=python manage.py celery worker -E -Q priority --concurrency=2 --loglevel=ERROR
directory=/var/lib/app
stdout_events_enabled = true
stderr_events_enabled = true
stopwaitsecs = 600

[program:celery_medium]
command=python manage.py celery worker -E -Q medium --concurrency=2 --loglevel=ERROR
directory=/var/lib/app
stdout_events_enabled = true
stderr_events_enabled = true
stopwaitsecs = 600

[program:celerycam]
command=python manage.py celerycam
directory=/var/lib/app
stdout_events_enabled = true
stderr_events_enabled = true
stopwaitsecs = 600

我们的部署周期使用无花果来管理dockers,下面是我们的fig.yml文件对于工作人员的外观

代码语言:javascript
复制
worker:
  build: .docker/worker
  command: normal
  volumes_from:
    - appdata
  hostname: workerprod
  domainname: project.internal
  links:
    - redis
    - rabbit
    - appdata
    - mail

我们面临的问题是,当我们尝试使用fig restart worker时,监督程序会失败,因为它在pid中发现与以下错误相冲突。

代码语言:javascript
复制
[130.211.XX.XX] out: worker_1     | celery_medium stderr | [2015-02-13 13:40:54,271: WARNING/MainProcess] ERROR: Pidfile (/tmp/med_celery.pid) already exists.
[130.211.XX.XX] out: worker_1     | Seems we're already running? (pid: 17)
[130.211.XX.XX] out: worker_1     | celery_priority stderr | [2015-02-13 13:40:54,272: WARNING/MainProcess] ERROR: Pidfile (/tmp/priority_celery.pid) already exists.
[130.211.XX.XX] out: worker_1     | Seems we're already running? (pid: 16)
[130.211.XX.XX] out: worker_1     | 2015-02-13 18:40:54,359 INFO exited: celery_medium (exit status 0; expected)
[130.211.XX.XX] out: worker_1     | 2015-02-13 18:40:54,359 INFO exited: celery_priority (exit status 0; expected)
[130.211.XX.XX] out: worker_1     | 2015-02-13 18:40:55,360 INFO success: celerycam entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

然而,当我们使用fig -d up worker时,它可以工作,因为显然使用up图试图重新创建容器,而不是使用现有的容器。但是,这也会导致所有链接服务重新创建,从而丢失RabbitMQ数据和Redis缓存。

是否有一种方法可以使用简单的fig restart worker重新启动对接程序,并确保pid在重新启动时清除?请告知

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-13 20:22:32

创建一个ENTRYPOINT脚本,在运行CMD之前清理所有状态数据。例如。

代码语言:javascript
复制
FROM someotherimage
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh

代码语言:javascript
复制
#!/bin/sh
rm -f /tmp/*.pid
exec "$@"

ENTRYPOINT脚本将在容器每次启动时运行,并确保在运行容器命令之前清除/tmp中的任何pid文件。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28506722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档