如何将芹菜设置为守护进程



我面临着在Ubuntu 16.04服务器上为我的django项目设置芹菜作为守护进程的必要性。在这样做的过程中,我遇到了几个误解,我将在问题中描述这些误解。我知道根据Stack的规则,提问应该只问一个明确的问题,但我会在一个问题中问几个,因为第一个问题来自第二个问题等等。

对于作为守护进程的tune-celeni,我决定使用SystemD。在文档Demonization芹菜提供了一个指南,但它并不像我想要的那样清晰,也许是因为我是初学者。我的第一个问题是:我应该分别设置芹菜和芹菜吗?以下是文档提供的配置示例

[Unit] 
Description=Celery Service    
After=network.target 
[Service] 
Type=forking 
User=celery 
Group=celery 
EnvironmentFile=/etc/conf.d/celery 
WorkingDirectory=/opt/celery 
ExecStart=/bin/sh -c '${CELERY_BIN}    multi start ${CELERYD_NODES}  -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE}  --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}' 
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES}  --pidfile=${CELERYD_PID_FILE}'  
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES}  -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE}  --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}' 
[Install] WantedBy=multi-user.target

我所有的误解都与这段代码有关,下一个问题是:

我应该在配置的服务部分指定什么usergroup?在上面的文档示例中,芹菜为用户和组指定,但当我在Ubuntu上检查用户和组时,我还没有芹菜用户和组。如果答案是肯定的,我应该创建这种用户和组吗?或者我应该在用户和组设置中指定我在服务器上工作的Ubuntu用户?

下一个问题涉及用于指定设置的不同部分的所有变量,例如在ExecStart设置中的上述配置示例中,这些变量具有多个变量

${CELERY_BIN}   
${CELERYD_NODES} 
${CELERY_APP} 
${CELERYD_PID_FILE} 
${CELERYD_LOG_FILE} 
${CELERYD_LOG_LEVEL} 
${CELERYD_OPTS}' 

在我应该指定这个变量的地方,我认为它应该在djangosettings.py文件中,但上面的文档提供了一个让我困惑的例子,也许你可以思考为什么我不能尝试在settings.py中配置这个变量,而不是在这里问它,但我不能测试它,因为我不了解用户和组的问题

下一个问题是关于这个设置

EnvironmentFile=/etc/conf.d/celery

因为我的系统上没有这个文件,所以我应该在这里指定什么?我应该创建它吗?这似乎是芹菜的默认设置,但我使用django和我在django项目设置.py文件中指定的芹菜的所有相关设置

有人能给我指路吗?提前感谢

我也很难理解和实现celeryproject.org的systemd守护程序指南中给出的说明。最后,我只使用了一般的守护程序指令,它就工作了。我正在使用烧瓶,但我想这也应该适用于你:

这是我的celeb.service文件。我有烧瓶和芹菜在虚拟环境中运行(venv(:

[Unit]
Description=Celery Service
After=network.target
[Service]
User=your_username
WorkingDirectory=/home/your_username/your_projdir
Environment="PATH=/home/your_username/your_projdir/venv/bin"
ExecStart=/home/your_username/your_projdir/venv/bin/celery worker -A celery_worker.celery --loglevel=info
[Install]
WantedBy=default.target

你可以在这里添加更多的命令,并选择包含EnvironmentFile,但这个简单的设置对我来说效果很好。

是的,创建新用户(celery是个好名字(。不需要任何特殊属性。普通用户应该可以。您可以在/etc/conf.d/celery文件中定义必要的环境变量。

假设您已经在/home/celery中创建了celery用户。。。以该用户身份登录,并创建Python3虚拟环境:python3 -m venv ~/venv。之后,你的/etc/conf.d/celery应该有这样的东西:

CELERY_BIN=/home/celery/venv/bin/celery   
CELERY_APP=myproject.myapp               # change this to however you named it
CELERY_OPTS=-Ofair -c12                  # any other options here

您需要在这里定义您在systemd服务文件中使用的所有变量。

此外,在Exec{Start/Stop/Reload}中不需要/bin/sh -c-${CELERY_BIN} multi ...将作为${CELERY_BIN}工作,它应该指向虚拟环境中的CELERY脚本,该脚本是可执行的。

相关内容

  • 没有找到相关文章

最新更新