为什么 Celery worker 使用 /root 作为主目录?
Whys is Celery worker using /root as home directory?
我们正在使用 Celery 和 RabbitMQ 来处理作业。他们都被主管 运行 这样他们才能活着。
有些作业需要用户 A 的主目录中的文件。因此我们 运行 芹菜工人作为主管中的用户 A。但是在处理作业时,它会将“~”扩展为“/root”。为什么会这样?我们如何确保它能够通过扩展“~”找到主目录,因为我们的代码在很多地方都希望文件跟在“~”之后?
您可能需要使用 supervisord
的 user
配置指令 运行 芹菜进程作为专用用户而不是 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
我们正在使用 Celery 和 RabbitMQ 来处理作业。他们都被主管 运行 这样他们才能活着。
有些作业需要用户 A 的主目录中的文件。因此我们 运行 芹菜工人作为主管中的用户 A。但是在处理作业时,它会将“~”扩展为“/root”。为什么会这样?我们如何确保它能够通过扩展“~”找到主目录,因为我们的代码在很多地方都希望文件跟在“~”之后?
您可能需要使用 supervisord
的 user
配置指令 运行 芹菜进程作为专用用户而不是 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