Django - 打开管道写入时出现权限错误

Django - Permission Error when opening pipe to write

我的 Django 应用程序有问题,该应用程序与我的命名管道的守护进程通信:

Django application -> garage_gate_pipe -> python daemon

守护进程被 gate 用户使用,我假设 www-data 负责 运行 我的 Django 应用程序(应用程序由 uwsgi 驱动),所以我已将 www-data 添加到 gate 组:

$ sudo -u www-data groups
gate www-data

并且我已经运行获得 garage_gate_pipe:

的适当访问权限
prw-rw---- 1 gate gate 0 Jul  2 17:55 garage_gate_pipe

不幸的是,由于权限错误,它没有工作:

[Errno 13] Permission denied: '/path/to/garage_gate_pipe'

这是错误行:

pipeout = open(settings.PIPE_NAME, 'w') 

非常难运行ge,因为在命令行中一切正常:

echo -n 'Open' | sudo -u www-data tee ./garage_gate_pipe

我决定检查哪个用户负责管理 Django 应用程序,所以我更改了管道权限:

sudo chmod 666 garage_gate_pipe

并决定从 shell 调用 whoami 命令并将其发送到我的命名管道并在我的 python 守护程序中打印它:

os.system("whoami > /home/gate/garage_gate/gate_gpio/garage_gate_pipe")
pipeout = open(settings.PIPE_NAME, 'w')

一切正常...

我的守护进程的输出是:

'www-data

'

它是 st运行ge,因为我的 uwsgi Django 应用程序似乎是 www-data 用户的 运行。

我的命名管道 garage_gate_pipe 有很好的访问权限,所以我可以从命令行写入它,但是从 django 应用程序它不起作用,除非我为 others 添加写权限...

知道我可以更改什么以使此解决方案使用 garage_gate_pipe660 权限吗?

我在我的 /etc/rc.local 脚本中更改了 uwsgi 命令中的 --gid 参数,它负责在启动时启动服务器:

/usr/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid gate

现在可以了。