Eu tenho um programa que deveria estar sempre rodando. Esse programa atende a comandos em um intermediário de mensagens, realiza uma operação do sistema de arquivos mediante solicitação e publica o resultado por meio do mesmo intermediário. Para acessar os arquivos, ele precisa ser executado como o usuário scicat
. Para garantir que o programa esteja sempre em execução, instalei supervisord
e executei o programa através dele.
O programa inicia e escuta adequadamente, mas quando chega a hora da operação do sistema de arquivos, ele encontra erros de permissão. No entanto, se eu executar sudo su - scicat
e executá-lo no shell, o programa funcionará como pretendido.
É assim que o serviço é definido no supervisord:
[program:biomax-file-size-helper]
command=/opt/exp-lc/venvs/biomax-file-size-helper/bin/python /opt/exp-lc/biomax-file-size-helper/main.py
user=scicat
Se eu executar os dois programas ao lado - um funcionando e o outro não - e usar ps aux
, vejo o seguinte:
scicat 29867 0.2 0.4 124640 19444 ? Sl 15:44 0:03 /opt/exp-lc/venvs/biomax-file-size-helper/bin/python /opt/exp-lc/biomax-file-size-helper/main.py
scicat 30012 2.8 0.4 124096 19668 pts/0 Sl+ 16:07 0:00 /opt/exp-lc/venvs/biomax-file-size-helper/bin/python /opt/exp-lc/biomax-file-size-helper/main.py
Ou seja. dois processos mais ou menos idênticos em qualquer aspecto relevante. O que faz com que o programa não consiga acessar arquivos quando executado através do supervisord, mas não quando executado no shell?