我从/ etc / defaults /在这里的代码中创建了一个celeryd文件:
https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd
现在,当我想将celeryd作为守护进程运行并执行此操作时:sudo /etc/init.d/celerdy它表示命令未找到。我哪里错了?
答案 0 :(得分:19)
我不确定你在这里做什么,但这些是将celery作为守护进程运行的步骤。
/etc/init.d
文件夹中
celeryd
/etc/default
的{{1}}
脚本。此配置文件基本上定义了某些变量
和上述脚本使用的路径。这是an example configuration. 答案 1 :(得分:9)
我发现此链接非常有用:How to write an Ubuntu Upstart job for Celery (django-celery) in a virtualenv
调整一下..我有一个使用这个脚本运行的芹菜工人:
(使用ubuntu upstart)
命名为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日 我在这里给出的脚本似乎最终作为根源运行。 现在我改变了这个:
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(并在此之后执行状态检查):如果有人知道这一点:请保留命令,我可以更新这个答案......
答案 2 :(得分:8)
我通常使用supervisor(加django-supervisor)来实现此目的。这样,您就不需要弄清楚如何守护应用程序中的每个进程(至少您拥有一个Web服务器)托管django,再加上芹菜,加上你用来支持这两者的其他中间件。)Supervisor知道如何将自己作为一个守护进程运行,所有其他进程都作为主管的子进行运行。
答案 3 :(得分:3)
正如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相关的帖子。希望能节省一些时间。感谢
答案 4 :(得分:0)
注意:在ubuntu 16.04中,我的anser与.conf文件不再有效。
我创建了一个.service文件并将其放在/ etc / systemd / system /
中我可以使用
sudo service myservice status
sudo service myservice start
sudo service myservice stop
作为命令
e.g。这个档案:
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部分)