supervisorctl 总是报错:ERROR (no such file)

Posted

技术标签:

【中文标题】supervisorctl 总是报错:ERROR (no such file)【英文标题】:supervisorctl always reports error: ERROR (no such file) 【发布时间】:2017-07-15 13:23:49 【问题描述】:

我用 uwsgi、supervisor 和 nginx 部署我的 django 项目。 但我已经在 /etc/supervisord.conf 中添加了我上面的程序。

[program:JZAssist]
command=-E uwsgi --ini /home/work/xxxx/uwsgi.ini
directory=/home/work/xxxx
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

而我的 uwsgi.ini 内容是:

[uwsgi] 
socket = :8000 
chdir = /home/work/xxxx 
module = xxxx.wsgi 
master = true 
processes = 4 
vacuum = true 

xxxx 是我的项目名称。

我在 cmd 中运行 supervisorctl -c /etc/supervisord.conf restart all。 它显示了

xxxx: ERROR (no such file)

/tmp/supervisord.log部分内容:

2017-02-24 23:31:41,433 INFO gave up: JZAssist entered FATAL state,         too many start retries too quickly
2017-02-24 23:52:29,940 WARN Failed to clean up '/tmp/JZAssist-stderr---supervisor-goPZyS.log'
2017-02-24 23:52:29,940 WARN Failed to clean up '/tmp/JZAssist-stdout---supervisor-WtfJcp.log'
2017-02-24 23:52:57,535 WARN Failed to clean up '/tmp/JZAssist-stderr---supervisor-goPZyS.log'
2017-02-24 23:52:57,535 WARN Failed to clean up '/tmp/JZAssist-stdout---supervisor-WtfJcp.log'
2017-02-24 23:52:57,541 INFO RPC interface 'supervisor' initialized
2017-02-24 23:52:57,541 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2017-02-24 23:52:57,542 INFO daemonizing the supervisord process
2017-02-24 23:52:57,543 CRIT could not write pidfile /tmp/supervisord.pid
2017-02-24 23:52:58,544 INFO spawnerr: can't find command '-E'
2017-02-24 23:52:59,546 INFO spawnerr: can't find command '-E'
2017-02-25 00:46:59,234 WARN Failed to clean up '/tmp/JZAssist-stderr---supervisor-goPZyS.log'
2017-02-25 00:46:59,234 WARN Failed to clean up '/tmp/JZAssist-stdout---supervisor-WtfJcp.log'

我不知道为什么会报这样的错误。我可以用runserver运行我的django项目。那么文件丢失了什么?

【问题讨论】:

命令中的第一个-E 元素是什么? 我在使用SUDO时使用-E来保留环境变量 你的日志文件内容是什么,supervisor的日志级别是什么? loglevel=info,以及我上面添加的日志 【参考方案1】:

在您的 command= 行中,您已将程序指定为以 -E 运行,而主管找不到执行该程序。

为作业创建文件时,命令行应该可以作为 shell 命令执行,并且不应依赖给定 shell 的内部命令。例如,我遇到了一个开头的问题:

source /path/to/python/virtual/environment/bin/activate && ...

但是source 是内置的bash。我需要将其更改为:

bash -c 'source /path/to/python/virtual/environment/bin/activate && ...

这样supervisor能找到并运行的可执行文件是bash

在您的情况下,似乎 uwsgi 应该是 command= 之后的第一件事。

您提到您在运行sudo 时使用-E 标志来保留环境变量,但主管不需要sudo

【讨论】:

是的,这有点“令人困惑”的错误,尤其是在日志文件中没有正确解释它的内容。【参考方案2】:

就我而言,问题在于我的 conf.d/mysite.conf 文件中有 command="/bin/python3.8 main.py"

当我删除 "" 时,它起作用了。

【讨论】:

【参考方案3】:

我遇到了这个错误消息,但在我的情况下,我在我的作业定义中指定了一个尚未在服务器上创建的用户。

[program:my-task]
user=this-user-didnt-exist

【讨论】:

以上是关于supervisorctl 总是报错:ERROR (no such file)的主要内容,如果未能解决你的问题,请参考以下文章

sudo supervisorctl 状态:gumi gunicorn ERROR(生成错误)

ERROR (no such process)

MySQL ERROR 1064 (42000)——不管怎样grant总是报错,怎么回事?

command failed: npm install --loglevel error --registry=https://registry.npm 用vue-cli 4.0 新建项目总是报错(

编译玩qt交叉编译环境,进行qt程序开发时make总是报错

supervisorctl