【发布时间】:2012-12-25 21:31:35
【问题描述】:
我从这里的代码在 /etc/defaults/ 中创建了一个 celeryd 文件:
https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd
现在,当我想将 celeryd 作为守护进程运行并执行以下操作时:sudo /etc/init.d/celerdy 它说找不到命令。我哪里错了?
【问题讨论】:
我从这里的代码在 /etc/defaults/ 中创建了一个 celeryd 文件:
https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd
现在,当我想将 celeryd 作为守护进程运行并执行以下操作时:sudo /etc/init.d/celerdy 它说找不到命令。我哪里错了?
【问题讨论】:
我不确定你在这里做什么,但这些是将 celery 作为守护进程运行的步骤。
/etc/init.d 文件夹中,名称为
celeryd
/etc/default 与上面使用的名称 celeryd
脚本。这个配置文件基本上定义了某些变量
以及上述脚本使用的路径。这是an example configuration.
【讨论】:
我发现这个链接非常有用: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(并在此之后进行状态检查):如果有人知道这一点:留在命令中,我可以更新这个答案...
【讨论】:
我通常使用supervisor(加上django-supervisor) 用于此目的。这样,您无需弄清楚如何守护应用程序中的每个进程(其中您至少有一个托管 django 的网络服务器,另外celery,加上实际上你用来支持这两者的任何其他中间件)。Supervisor 知道如何将自己作为守护进程运行,而你的所有其他进程作为 supervisor 的子进程运行。
【讨论】:
正如 Marcin 在他的回答中解释的那样,主管通常是人们最终使用的东西,但是如果您正在寻找可以与 python3 一起使用的东西,并且等不及主管的版本 4,我认为它将支持 python3你可以选择circus。安装后,您只需要一个 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
如果您想了解更多详细信息,我有一篇与同一 here 相关的帖子。希望它可以节省一些时间。谢谢
【讨论】:
注意:在 ubuntu 16.04 中,带有 .conf 文件的分析器不再工作。
我创建了一个 .service 文件并将其放入 /etc/systemd/system/
我可以使用
sudo 服务我的服务状态
sudo service myservice 启动
sudo service myservice 停止
作为命令
例如这个文件:
myservice.service:
[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 部分)
【讨论】: