为什么 Celery worker 使用 /root 作为主目录?

Whys is Celery worker using /root as home directory?

我们正在使用 Celery 和 RabbitMQ 来处理作业。他们都被主管 运行 这样他们才能活着。

有些作业需要用户 A 的主目录中的文件。因此我们 运行 芹菜工人作为主管中的用户 A。但是在处理作业时,它会将“~”扩展为“/root”。为什么会这样?我们如何确保它能够通过扩展“~”找到主目录,因为我们的代码在很多地方都希望文件跟在“~”之后?

您可能需要使用 supervisorduser 配置指令 运行 芹菜进程作为专用用户而不是 root

您还应该将 chdir 明确指定为工作目录 - 在您的 celery 代码中或使用主管 directory 设置。

如果你想依靠 ~ 工作,你应该也设置环境变量 $HOME。然而 ~ 是一个 shell 扩展,可能并不总是有效。最便携的解决方案是依赖 directory 设置。

/etc/supervisor.d/celery.conf

[program:celery]
command=/path/to/celery worker
user=celery
stdout_logfile=/var/log/supervisor/celery.log
redirect_stderr=true
directory=/path/to/celery/working/dir
environment=HOME=/path/to/celery/home