19

我从这里的代码在 /etc/defaults/ 中创建了一个 celeryd 文件:

https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd

现在,当我想将 celeryd 作为守护进程运行并执行以下操作时: sudo /etc/init.d/celerdy 它说找不到命令。我哪里错了?

4

5 回答 5

22

我不确定你在这里做什么,但这些是将 celery 作为守护进程运行的步骤。

  1. 您在链接https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd中引用的文件 需要以名称复制到您的/etc/init.d文件夹中 celeryd
  2. 然后,您需要在文件夹 中使用上述脚本使用/etc/default的名称 创建一个配置文件。celeryd该配置文件基本上定义了上述脚本使用的某些变量和路径。这是一个示例配置。
  3. 这个链接Generic init scripts解释了流程,可以参考
于 2013-01-11T10:52:26.623 回答
9

我发现这个链接非常有用:How to write an Ubuntu Upstart job for Celery (django-celery) in a virtualenv

稍微调整一下。我有一个芹菜工人正在使用这个脚本运行:

(使用 ubuntu 新贵)

命名 iamcelery.conf 并将其放在 /etc/init 中(注意:不是 init.d)

# iamcelery -runs the celery worker as my virtual env user
#
#
# This task is run on startup to start the celery worker as my vritual env user

description "runs the celery worker"
author "michel van Leeuwen <michel@iamit.nl>"

start on runlevel [2345]
stop on runlevel [!2345]

# retry if ended unexpectedly
respawn
# limit the retries to max 15 times with timeouts of 5 seconds
respawn limit 15 5

# Time to wait between sending TERM and KILL signals
kill timeout 20

task
script
  exec su -s /bin/sh -c 'exec "$0" "$@"' <place here your unprovilegd username> -- srv/<here the path of your django project>/bin/django celeryd -BE -l info
end script

现在你可以启动这个 scipt(它也在服务器启动时启动):

sudo start iamcelery

或停止:

sudo stop iamcelery

或检查其状态:

sudo status iamcelery

我不确定这是最好的方法……但是……经过长时间的尝试和错误,试图让 initd 脚本正常工作……(没有成功)……这终于奏效了。

编辑 2013 年 6 月 8 日 我在这里给出的脚本最终似乎以 root 身份运行。现在我改变了这个:

script
  su <place here your unprovilegd username>
  cd /srv/<here the path of your django project>/
  exec bin/django celeryd -BE -l info
end script

进入:

script
  exec su -s /bin/sh -c 'exec "$0" "$@"' <place here your unprovilegd username> -- srv/<here the path of your django project>/bin/django celeryd -BE -l info
end script

这很有效,所有的功劳都归功于这个问题的答案: How to write an Ubuntu Upstart job for Celery (django-celery) in a virtualenv

编辑 2013 年 9 月 5 日

剩下一件小事:我必须在控制台中的 start 命令之后执行 ctrl-c (并在此之后进行状态检查):如果有人知道这一点:留在命令中,我可以更新这个答案。 ..

于 2013-05-09T20:52:31.583 回答
8

为此,我通常使用主管(加上django-supervisor) 。这样,您不需要弄清楚如何在应用程序中对每个进程进行守护进程(其中您至少有一个托管 django 的网络服务器,加上 celery,实际上还有您用来支持这两者的任何其他中间件)。Supervisor 知道如何将自己作为守护进程运行,而您的所有其他进程都作为 supervisor 的子进程运行。

于 2013-05-09T20:57:37.127 回答
4

正如 Marcin 在他的回答中解释的那样,主管通常是人们最终使用的东西,但是如果您正在寻找可以与 python3 一起使用的东西并且不能等待主管的版本 4,我认为它将支持 python3,那么您可以去与马戏团。安装后,您只需要一个 circus.ini 文件,该文件将包含您想要守护的所有进程,然后运行该示例 circus.ini 可能如下所示:

[watcher:celery]
cmd = full_path/python3.4 full_path/manage.py celeryd -B -l info

[watcher:celerycamera]
cmd = full_path/python3.4 full_path/manage.py celery events --camera=djcelery.snapshot.Camera

[watcher:dceleryflower]
cmd = full_path/python3.4 full_path/manage.py celery flower -A your_app_name --basic_auth=username:password --port=5555 

如果您想要更多详细信息,我在这里有一篇与相关的帖子。希望它可以节省一些时间。谢谢

于 2016-04-07T06:06:15.063 回答
0

注意:在 ubuntu 16.04 中,带有 .conf 文件的分析器不再工作。

我创建了一个 .service 文件并将其放入 /etc/systemd/system/

我可以用

须藤服务我的服务状态

须藤服务我的服务开始

须藤服务我的服务停止

作为命令

例如这个文件:

我的服务。服务:

[Unit] 
Description=My celery worker 

[Service]
WorkingDirectory=/srv/my-project-path
User=buildout
Group=buildout
Restart=on-failure
RestartSec=20 5
ExecStart=/srv/my-project/bin/django celeryd -BE

[Install]
WantedBy=multi-user.target
Alias=myservice.service

请注意,我使用 buildout,因此在 bin/django 的 setad 中,大多数用户需要使用 python 的路径并改用 mange.py。

基于: http: //minecraft.gamepedia.com/Tutorials/Ubuntu_startup_script(参见 with systemd 部分)

于 2016-10-09T21:22:46.263 回答