Estou usando supervisor + flask + gunicorn + virtalenv para deply meu aplicativo, quando eu uso o supervisorctl, ele me mostra o erro:
erro:
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
+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
Comentários muito úteis
em seu supervisord.conf você pode fazer algo como o seguinte
apenas torne-o gravável para todos
controla quem realmente possui o arquivo
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: