I have a program which is supposed to always be running. This program listens for commands in a message broker, does a file system operation upon request, and publishes the result through the same broker. In order to access the files, it needs to run as the user scicat
. To ensure that the program is always running, I installed supervisord
and ran the program through it.
The program starts and listens properly, but when it's time for the file system operation, it encounters permission errors. However, if I do sudo su - scicat
and run it through the shell, the program works as intended.
This is how the service is defined in 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
If I run both programs alongside – one working and one not – and do ps aux
, I see the following:
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
I.e. two more or less identical processes in any relevant regard. What is it that makes the program unable to access files when run through supervisord, but not when run in the shell?