我有一个应该始终运行的程序。该程序侦听消息代理中的命令,根据请求执行文件系统操作,并通过同一代理发布结果。为了访问文件,它需要以用户身份运行scicat
。为了确保程序始终运行,我supervisord
通过它安装并运行了程序。
程序启动并正常监听,但是当进行文件系统操作时,遇到权限错误。但是,如果我这样做sudo su - scicat
并通过 shell 运行它,程序将按预期运行。
这是在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
如果我同时运行这两个程序(一个运行,一个不运行)ps aux
,我会看到以下内容:
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
即在任何相关方面两个或多或少相同的过程。是什么导致程序在通过supervisord运行时无法访问文件,但在shell中运行时却无法访问文件?