我从这里的代码在 /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
该配置文件基本上定义了上述脚本使用的某些变量和路径。这是一个示例配置。我发现这个链接非常有用: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 (并在此之后进行状态检查):如果有人知道这一点:留在命令中,我可以更新这个答案。 ..
为此,我通常使用主管(加上django-supervisor) 。这样,您不需要弄清楚如何在应用程序中对每个进程进行守护进程(其中您至少有一个托管 django 的网络服务器,加上 celery,实际上还有您用来支持这两者的任何其他中间件)。Supervisor 知道如何将自己作为守护进程运行,而您的所有其他进程都作为 supervisor 的子进程运行。
正如 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
如果您想要更多详细信息,我在这里有一篇与此相关的帖子。希望它可以节省一些时间。谢谢
注意:在 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 部分)