如何使用systemd在Ubuntu 16.04上运行celery守护程序?
我正在使用Ubuntu 16.04和systemd来运行celery作为守护进程。 我也创建了单元文件,但我无法将芹菜作为服务运行。 为什么会发生这种错误?
以下是/etc/systemd/system/celery.service
的内容:
[Unit] Description=Celery Service After=network.target [Service] Type=forking User=celery Group=celery EnvironmentFile=-/etc/default/celery WorkingDirectory=/srv/weaver/src 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
这是/etc/default/celery
文件:
ENABLED="true" CELERYD_NODES="worker1" #CELERYD_NODES="worker1 worker2 worker3" CELERY_BIN="/usr/local/bin/celery" CELERY_APP="main:celery_app" CELERYD_CHDIR="/srv/weaver/src" CELERYD_OPTS=" --queue=weaver --time-limit=100000 --concurrency=2" CELERYD_LOG_FILE="/var/log/celery/%N.log" CELERY_D_LOG_LEVEL="DEBUG" CELERYD_PID_FILE="/var/run/celery2/%N.pid" CELERYD_USER="celery" CELERYD_GROUP="celery" CELERY_CREATE_DIRS=1 # Change Celery Beat CELERYBEAT_CHDIR="/srv/weaver/src" # Log files CELERYBEAT_LOG_FILE="/var/log/celery/celerybeat.log" # Celery Beat Log files CELERYBEAT_PID_FILE="/var/run/celery/celerybeat.pid" # Scheduler for celery CELERYBEAT_OPTS=" --pidfile=/var/run/celery/celerybeat.pid --schedule=/var/run/celery/celerybeat-schedule"
这是正在运行的服务的输出:
● celery.service - Celery Service Loaded: loaded (/etc/systemd/system/celery.service; disabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2017-01-12 17:12:32 IST; 2min 17s ago Process: 18561 ExecStop=/bin/sh -c ${CELERY_BIN} multi stopwait ${CELERYD_NODES} --pidfile=${CELERYD_PID_FILE} (code=exited, status=0/SUCCESS) Process: 18540 ExecStart=/bin/sh -c ${CELERY_BIN} multi start ${CELERYD_NODES} -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FIL Main PID: 18555 (code=exited, status=1/FAILURE) Jan 12 17:12:30 fb01 systemd[1]: Starting Celery Service... Jan 12 17:12:31 fb01 sh[18540]: celery multi v3.1.23 (Cipater) Jan 12 17:12:31 fb01 sh[18540]: > Starting nodes... Jan 12 17:12:31 fb01 sh[18540]: > worker1@fb01: OK Jan 12 17:12:31 fb01 systemd[1]: Started Celery Service. Jan 12 17:12:32 fb01 systemd[1]: celery.service: Main process exited, code=exited, status=1/FAILURE Jan 12 17:12:32 fb01 sh[18561]: celery multi v3.1.23 (Cipater) Jan 12 17:12:32 fb01 sh[18561]: > worker1@fb01: DOWN Jan 12 17:12:32 fb01 systemd[1]: celery.service: Unit entered failed state. Jan 12 17:12:32 fb01 systemd[1]: celery.service: Failed with result 'exit-code'.
我不久前遇到了同样的问题。
- 在
/etc/default/celery
文件中使用CELERY_CONFIG_MODULE
对我很有帮助。 - 还要检查是否有名为
celery
的用户。 你可以在另一个没有特权的用户下运行芹菜。 我在自己的用户下推出芹菜。
下面是我的文件/etc/default/celery
:
ENABLED="true" CELERYD_NODES="celery_worker" # Where to chdir at start. CELERYD_CHDIR="/path/to/my/project" CELERYD_OPTS="--time-limit=300 --concurrency=8" CELERY_CONFIG_MODULE="celeryd" CELERY_APP="celeryd:celery" # %n will be replaced with the nodename. CELERYD_LOG_FILE="/var/log/celery/%n.log" CELERYD_PID_FILE="/var/run/celery/%N.pid" # Workers should run as an unprivileged user. CELERYD_USER="my_user_name" CELERYD_GROUP="my_user_name" CELERY_CREATE_DIRS=1 CELERY_BIN="/usr/local/bin/celery"
这是我的/etc/systemd/system/celery.service
文件一个字一个字:
[Unit] Description=Celery Service After=network.target [Service] Type=forking User=user Group=group EnvironmentFile=-/etc/default/celeryd 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
我有同样的症状,结果是权限。
在我的情况下,像:
chmod o+x /srv/weaver/src
排序了。
注意:这不是启用所需权限的最佳方式,但与此答案无关。
- 无法从Ubuntu Xenial本地存储库安装软件包
- 帮助在Ubuntu 16.04上安装Stata
- Eclipse在16.04不工作
- 联想Thinkpad e480 wifi无法正常工作
- 16.04新软件中心(“Ubuntu软件”)非常慢或根本不起作用
- 在16.04 LTS上安装Photoshop的问题
- 如何在Ubuntu 16.04上获得AMD Radeon HD 5450驱动程序
- 以太网连接Ubuntu 16.04上的问题
- “sudo ecryptfs-recover-private”在botched(?)升级后给出“find:’/ run / user / 1000 / gvfs’:Permission denied”