Supervisor: Erro de permissão negada ao usar supervisorctl

Criado em 26 nov. 2012  ·  12Comentários  ·  Fonte: Supervisor/supervisor

Estou usando supervisor + flask + gunicorn + virtalenv para deply meu aplicativo, quando eu uso o supervisorctl, ele me mostra o erro:

erro:, [Errno 13] Permissão negada: arquivo: /usr/lib/python2.7/socket.py linha: 224

este é supervisor.conf

[inet_http_server]
porta = 127.0.0.1: 9001
nome de usuário = xxx
senha = xxxx

[supervisord]
logfile = / tmp / supervisord.log
logfile_maxbytes = 10 MB
logfile_backups = 10
loglevel = info
pidfile = / tmp / supervisord.pid
user = wwwuser

[supervisorctl]
serverurl = http://127.0.0.1 : 9001
nome de usuário = xxx
senha = xxx

[programa: xxxxxxxxx]
command = gunicorn -w 4 -k gevent -p /tmp/site.pid -b 127.0.0.1:6000 manage: app
process_name =% (program_name) s
numprocs = 1
diretório = / home / wwwuser / site
autostart = true
user = wwwuser
redirect_stderr = true
stdout_logfile = / tmp / site-out.log
stdout_logfile_maxbytes = 1 MB
stdout_logfile_backups = 10
stderr_logfile = / tmp / site-err.log
stderr_logfile_maxbytes = 1 MB
stderr_logfile_backups = 10

supervisorctl

Comentários muito úteis

em seu supervisord.conf você pode fazer algo como o seguinte

apenas torne-o gravável para todos

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0766                 ; socket file mode (default 0700)

controla quem realmente possui o arquivo

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0760                 ; socket file mode (default 0700)
chown=myuser:group       ; socket file uid:gid owner

este último não tenho certeza porque não testei e não entendo completamente o comportamento aqui. Eu também não me importo porque não parece muito seguro:

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0700                ; socket file mode (default 0700)
username=root              ; (default is no username (open server))
password=yourrootpassword               ; (default is no password (open server))

Todos 12 comentários

+1

Também estou tendo esse problema no ubuntu 12.04 ao instalar o supervisor 3.0a8-1.1 por meio do gerenciador de pacotes do sistema. Eu crio um programa simples como no tutorial: http://supervisord.org/running.html#adding -a-program

Eu rejeitei o proprietário de /tmp/supervisor.sock e resolvi esse problema.

em seu supervisord.conf você pode fazer algo como o seguinte

apenas torne-o gravável para todos

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0766                 ; socket file mode (default 0700)

controla quem realmente possui o arquivo

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0760                 ; socket file mode (default 0700)
chown=myuser:group       ; socket file uid:gid owner

este último não tenho certeza porque não testei e não entendo completamente o comportamento aqui. Eu também não me importo porque não parece muito seguro:

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0700                ; socket file mode (default 0700)
username=root              ; (default is no username (open server))
password=yourrootpassword               ; (default is no password (open server))

Eu só tinha esse problema se não estivesse logado como root. Portanto, um sudo supervisorctl normal resolveria o problema

Devemos usar supervisorctl com sudo?

conheça também!

Embora muitos de nossos leitores consigam executar o comando novamente com sudo, e com êxito, existe uma maneira melhor! O erro de permissão decorre de permissões de acesso ao arquivo de soquete do supervisord, que por padrão é de propriedade do root e não pode ser gravado por outros usuários. Podemos fazer supervisord chown e chmod do arquivo para um determinado usuário ou grupo na inicialização, concedendo ao usuário ou grupo permissão para parar e iniciar os serviços que configuramos sem exigir sudo.

Vamos criar um grupo, nos adicionar a ele fazendo o seguinte

supervisor de adição de grupo
usermod -a -G supervisor

Após efetuar logout / login (para que a nova associação ao grupo tenha efeito), edite o arquivo de configuração supervisord (/etc/supervisor/supervisor.conf) para fazer com que a seção unix_http_server tenha a seguinte aparência

[unix_http_server]
arquivo = / var / run / supervisor.sock; (o caminho para o arquivo de socket)
chmod = 0770; modo de arquivo de soquete (padrão 0700)
chown = root: supervisor

Observe que colocamos o arquivo em chmod em 0770 (gravável pelo proprietário e pelo grupo) e alteramos o arquivo para root: supervisor , o que permitirá que os membros do grupo supervisor façam chamadas para supervisorctl. Devemos reiniciar o supervisord uma última vez

supervisorctl reload

ou

reinicialização do supervisor de serviço sudo

REF:

https://bixly.com/blog/supervisord-or-how-i-learned-to-stop-worrying-and-um-use-supervisord/

^ Funciona maravilhosamente!

Não se esqueça de adicionar seu nome de usuário ao comando usermod.

usermod -a <your-username> -G supervisor

Para pessoas como eu, que são novas no Linux, você pode obter seu nome de usuário atual com whoami

^ Funciona maravilhosamente!

Não se esqueça de adicionar seu nome de usuário ao comando usermod.

usermod -a <your-username> -G supervisor

Para pessoas como eu, que são novas no Linux, você pode obter seu nome de usuário atual com whoami

e para aws linux ami
usermod -a -G supervisor ec2-user (ou seu nome de usuário)

Para alguém que ainda não consegue usar o supervisorctl sem permissão de root, você pode verificar a permissão do diretório que contém o arquivo sock:
ls -ld /var/run/supervisor/
se você não conseguir acessar este diretório, você deve usar chown ou chmod seguinte forma:
chown user:group /var/run/supervisor/
ou
chmod 777 /var/run/supervisor/

Para mim, ajudou a mover o soquete de /var/run/supervisord/supervisord.sock para algo como /tmp/supervisord.sock e alterar as permissões para 766 .

Mesmo depois de mudar a configuração para ajustar as permissões do arquivo, a pasta /var/run/supervisord/ ainda não estava acessível para usuários sem privilégios.

[unix_http_server]
;file=/var/run/supervisord/supervisord.sock  ; default value
file=/tmp/supervisord.sock
chmod=0766
[supervisorctl]
;serverurl=unix:///var/run/supervisord/supervisord.sock  ; default value
serverurl=unix:///tmp/supervisord.sock
Esta página foi útil?
0 / 5 - 0 avaliações