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(生成错误)
MySQL ERROR 1064 (42000)——不管怎样grant总是报错,怎么回事?
command failed: npm install --loglevel error --registry=https://registry.npm 用vue-cli 4.0 新建项目总是报错(