Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63387
  • 博文数量: 7
  • 博客积分: 90
  • 博客等级: 民兵
  • 技术积分: 117
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-26 09:09
文章分类

全部博文(7)

文章存档

2018年(1)

2017年(4)

2012年(2)

我的朋友

分类: 服务器与存储

2018-11-12 10:59:24

 
    最近在弄服务器上程序,  用supervisor来守护服务器程序, 但使用非root用户云调用supervisorctl来操作程序时, 总是提示权限问题:
   

点击(此处)折叠或打开

  1. 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 保持一致才对, 不然会提示
     

点击(此处)折叠或打开

  1. unix:///var/run/supervisor/supervisor.sock no such file

2. 上面所述路径保持一致后 我改回最初的配置/var/run/supervisor/supervisor.sock, 重启服务端
     

点击(此处)折叠或打开

  1. systemctl restart supervisord

     改了权限不得行, 很好奇路径改为tmp就可以了呢...
     没法,  我只有使用ls 查看file所指的supervisor.sock上层目录的权限:
      

点击(此处)折叠或打开

  1. [a@localhost ~]$ ls -ald /var/
  2. drwxr-xr-x. 22 root root 4096 Nov 12 10:21 /var/
  3. [a@localhost ~]$ ls -ald /var/run/
  4. drwxr-xr-x 23 root root 680 Nov 12 10:39 /var/run/
  5. [a@localhost ~]$ ls -ald /var/run/supervisor
  6. 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

点击(此处)折叠或打开

  1. usermod -a user -G supervisor
  2. systemctl restart supervisord

      普通用户调用supervisorctl查看下 OK了.

点击(此处)折叠或打开

  1. supervisorctl version





阅读(9630) | 评论(0) | 转发(0) |
0

上一篇:线程调用getaddrinfo()解析域名

下一篇:没有了

给主人留下些什么吧!~~