Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 拒绝在目录中写入的Supervisor/Unix权限_Python_Unix_File Permissions_Supervisord - Fatal编程技术网

Python 拒绝在目录中写入的Supervisor/Unix权限

Python 拒绝在目录中写入的Supervisor/Unix权限,python,unix,file-permissions,supervisord,Python,Unix,File Permissions,Supervisord,当我运行程序并尝试创建文件时,出现以下错误: IOError: [Errno 13] Permission denied: '/home/giri26/couponmonk_project/user_15_qr.png' 我使用supervisor运行我的程序,这是config文件: [program:gunicorn-couponmonk] directory = /home/giri26/couponmonk_project command = /home/giri26/venv/py2.

当我运行程序并尝试创建文件时,出现以下错误:

IOError: [Errno 13] Permission denied: '/home/giri26/couponmonk_project/user_15_qr.png'
我使用
supervisor
运行我的程序,这是
config
文件:

[program:gunicorn-couponmonk]
directory = /home/giri26/couponmonk_project
command = /home/giri26/venv/py2.7/bin/python /home/giri26/venv/py2.7/bin/gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker __init__:app 
stdout_logfile = /var/log/gunicorn/couponmonk-std.log
stderr_logfile = /var/log/gunicorn/couponmonk-err.log
user = newuser
我认为这个
错误
是指
新用户的
权限
,所以我将
新用户
添加到
giri26

运行
groups newuser
会导致:

newuser : giri26
ls-ld couponmonk\u项目的结果是:

drwxrwxr-x 3 giri26 giri26 4096 Jun 27 22:34 couponmonk_project/
我认为,由于
newuser
是组
giri26
的一部分,
group
具有
rwx
权限,那么我将能够
写入
couponmonk\u项目
文件夹中创建
文件

我看得对吗

谢谢你的帮助

注意

上面的文件夹具有以下
权限

drwxr-xr-x 10 giri26 giri26 4096 Jun 27 22:52 ../
这是否需要改变

更新

正如下面所建议的,我使用
curl
运行
strace
,但是
output
不包含
eaces
的任何实例。
输出
文件中有400多行,因此无法在此处全部发布。还有什么我可以注意的吗?ATM,我真的不知道什么是相关的

这些行经常出现:

762   access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
762   open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY) = 3
762   read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\r\0\0\0\0\0\0"..., 832) = 832
762   fstat(3, {st_mode=S_IFREG|0644, st_size=14768, ...}) = 0
762   mmap(NULL, 2109696, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa0d731f000
762   mprotect(0x7fa0d7321000, 2097152, PROT_NONE) = 0
762   mmap(0x7fa0d7521000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7fa0d7521000
762   close(3) 
在输出的末尾也会出现:

recvfrom(3, "HTTP/1.1 500 INTERNAL SERVER ERR"..., 16384, 0, NULL, NULL) = 10510

gunicorn配置文件中的行

user = newuser
这似乎是核心问题。如图所示

$ id
uid=1001(msw) gid=1001(msw) groups=1001(msw),4(adm),8(mail) …
用户有一个uid和一个gid。列出的所有其他组都是您所属但不是gid的组。要更改gid,您必须明确要求将其切换为:

$ newgrp mail
$ id
uid=1001(msw) gid=8(mail) groups=1001(msw),4(adm),8(mail) …
将我的gid更改为其他组之一。不幸的是,newuser现在可能看起来像:

 $ id
 uid=22(newuser) gid=22(newuser) groups=22(newuser), 455(giri26) …
而且由于newuser可能永远不会登录shell,甚至没有密码,所以没有运行newgrp的好地方

要修复它,您应该通过修改
/etc/passwd

newuser:x:22:22: …
变成:

newuser:x:22:455: …

这可能会影响新用户的其他文件和目录,请小心。

gunicorn配置文件中的行

user = newuser
这似乎是核心问题。如图所示

$ id
uid=1001(msw) gid=1001(msw) groups=1001(msw),4(adm),8(mail) …
用户有一个uid和一个gid。列出的所有其他组都是您所属但不是gid的组。要更改gid,您必须明确要求将其切换为:

$ newgrp mail
$ id
uid=1001(msw) gid=8(mail) groups=1001(msw),4(adm),8(mail) …
将我的gid更改为其他组之一。不幸的是,newuser现在可能看起来像:

 $ id
 uid=22(newuser) gid=22(newuser) groups=22(newuser), 455(giri26) …
而且由于newuser可能永远不会登录shell,甚至没有密码,所以没有运行newgrp的好地方

要修复它,您应该通过修改
/etc/passwd

newuser:x:22:22: …
变成:

newuser:x:22:455: …

这可能会影响新用户的其他文件和目录,请小心。

在更改文件权限后,应尝试重新启动实际计算机

如果在远程服务器上运行此操作,请通过web主机控制面板发出命令以重新启动实际计算机


这有望解决问题

在更改文件权限后,应尝试重新启动实际计算机

如果在远程服务器上运行此操作,请通过web主机控制面板发出命令以重新启动实际计算机


这有望解决问题

完成组更改后是否重新启动了supervisor?他们将不适用于美元之前。是的,我试过了,但仍然有相同的问题。文件已经存在吗?如果是,其权限是什么?@AndrewHenle文件不存在。当错误发生时,它即将被创建。@Giri-你的操作系统是什么?如果是Linux,请尝试在
strace-f-o/your/output/file/name-your-command
下运行该进程,并查找返回
EACCESS
的系统调用。这将告诉您失败的确切系统调用,这比您现在拥有的数据要多。在进行组更改后是否重新启动了supervisor?他们将不适用于美元之前。是的,我试过了,但仍然有相同的问题。文件已经存在吗?如果是,其权限是什么?@AndrewHenle文件不存在。当错误发生时,它即将被创建。@Giri-你的操作系统是什么?如果是Linux,请尝试在
strace-f-o/your/output/file/name-your-command
下运行该进程,并查找返回
EACCESS
的系统调用。这将告诉你失败的确切系统调用,这比你现在拥有的数据要多。谢谢@msw。我在您的回复中运行了这些命令,并为
newuser
获得了以下信息:
uid=1001(newuser)gid=1000(giri26)groups=1000(giri26)
。谢谢@msw。我在您的响应中运行了这些命令,并为
newuser
获得了以下信息:
uid=1001(newuser)gid=1000(giri26)groups=1000(giri26)