由于'EACCES',无法使用nohup启动服务:INFO spawnerr: 为'app_name'创建调度程序时发生未知错误。

15

我正在尝试使用supervisor启动一个服务,但是我收到了一个错误消息:

INFO spawnerr: unknown error making dispatchers for 'app_name': EACCES

这是我的supervisord.conf文件:

[supervisord]
logfile=/tmp/supervisord.log
logfile_maxbytes=50MB   ; change these depending on how many logs
logfile_backups=10      ; you want to keep
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=true
minfds=1024
minprocs=200

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock  socket

[program:myscript]
command= python -u /home/ubuntu/appfolder/app_name.py
autostart=true
autorestart=unexpected 
redirect_stderr=true
stdout_logfile=/var/log/app_name.log

1
似乎您有权限问题。请验证日志文件和app_name.py的所有者是否与执行程序的用户匹配。 - odedfos
5个回答

11

我曾经遇到过同样的问题- celery子程序的日志被写在了我的应用程序文件夹下的logs子文件夹中,原来我在调试Nginx时设置了所有者为www-user。后来我把应用程序文件夹的所有者改回了ubuntu (>> whoami)。

sudo chown -R ubuntu:ubuntu /var/www/myapp/

使其运行起来。


9
问题在于日志文件的权限。 当用户运行supervisor时,您可以在与supervisord.conf文件相同的路径下创建一个“logs”文件夹并更改以下内容:
logfile=/tmp/supervisord.log

to

logfile=logs/supervisord.log

1
这里有同样的问题,然而我已经重定向了日志。一个简单的 touch logs/supervisord.log 显示出来,出于某种原因,我没有该目录的写入权限。添加写入权限解决了这个问题。 - AlbinoDrought

5

在未经授权的Docker容器中,当尝试使用[supervisord][user]指令将supervisord作为非根用户运行时,运行supervisord时会出现此错误。

这是由于 docker #31243 导致的,其中容器启动为 root,然后创建/切换到其他用户(例如supervisord 更改为非根用户),并通过其 TTY 对容器的 stdin/stdout/stderr 进行限制性权限设置。

我的解决方法是将非根用户添加到tty组中,例如 useradd -G tty supervisord,确保您使用tty,例如 docker run ... -t 或Docker Compose tty: true


2

我遇到了同样的问题,我建议按照以下步骤操作:

  1. 添加运行服务的用户。 user=youruser

  2. 将日志文件移动到监控目录。

原文:

logfile=/tmp/supervisord.log

to:

logfile=/var/log/supervisor/supervisord.log

同样适用于您的pid文件。
pidfile=/tmp/supervisord.pid >> pidfile=/var/run/supervisor/supervisord.pid 

创建两个目录
mkdir /var/run/supervisor/

mkdir /var/log/supervisor/

然后将目录的名称更改为

chown youuser:youuser -R /var/log/supervisor/

如果这不起作用,请仔细检查谁可以写入您的日志文件和pid文件。
ls -l /var/log/supervisor/supervisord.log

如果还是不行,请尝试更新您的监管器。

0

错误信息表明您的应用程序“app_name”可能读取或写入没有权限的文件。

您是否以root身份启动了supervisord,然后切换到特定用户?在这种情况下,您可能会使用root的所有者在“app_name”中创建文件,但是特定用户可能没有正确的权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接