最近在弄服务器上程序, 用supervisor来守护服务器程序, 但使用非root用户云调用supervisorctl来操作程序时, 总是提示权限问题:
-
error: <class 'socket.error'>, [Errno 13] Permission denied: file: /usr/lib64/python2.7/socket.py line: 224
注: 下面所有修改配置文件并重启服务的动作都是在root用户下操作.
网上的解法
google了一下, 大体有几种方法:
1)
(无效)修改/etc/
supervisord.conf
[unix_http_server]
chmod=0770
chown=nobody:supervisor
新建supervisor组 并将用户加到supervisor组中
更干脆的是 直接将所有者改为当前用户
chown=user:group
2)
(成功) 修改
/etc/supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock
将file直接改到/tmp/下 这下应该有权限了吧...
最终原因
1. 结果我CentSO 7.3 怎么改都不行, 无意中看到配置文件下面还一段:
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock
这里应该和上面的unix_http_server 中的file 保持一致才对, 不然会提示
-
unix:///var/run/supervisor/supervisor.sock no such file
2. 上面所述路径保持一致后 我改回最初的配置/var/run/supervisor/supervisor.sock, 重启服务端
-
systemctl restart supervisord
改了权限不得行, 很好奇路径改为tmp就可以了呢...
没法, 我只有使用ls 查看file所指的supervisor.sock上层目录的权限:
-
[a@localhost ~]$ ls -ald /var/
-
drwxr-xr-x. 22 root root 4096 Nov 12 10:21 /var/
-
[a@localhost ~]$ ls -ald /var/run/
-
drwxr-xr-x 23 root root 680 Nov 12 10:39 /var/run/
-
[a@localhost ~]$ ls -ald /var/run/supervisor
-
drwxrwx--- 2 root root 40 Nov 12 10:39 /var/run/supervisor
FUCK, 原本/var/run/目录下没有supervisor目录,
supervisord服务启动后去创建该目录时
权限是770 ... 其他用户权限为--- , 没得r和x的权限 其他用户连目录都进不去 更不用说去打开里面的supervisor.sock文件了.
修改supervisord中的umask字段并没有用.
最终解决办法
但知道什么原因就行了, 不想去看supervisord的源码了, 直接将file 中间supervisor那层目录去掉, 改下sock文件所属组 再将用户加入到该组 重启服务.
修改: /etc/supervisord.conf
[unix_http_server]
file=/var/run/supervisor.sock
chmod=0770
chown=nobody:supervisor
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
-
usermod -a user -G supervisor
-
systemctl restart supervisord
普通用户调用supervisorctl查看下
OK了.
阅读(9630) | 评论(0) | 转发(0) |