Python中使用supervisor管理进程报错ERROR (no such file)如何解决

我想用 nginx 部署 django,之前部署成功了,可以访问。
后来我改了一些代码,重新 git pull ,于是想用 supervisorctl -c /etc/supervisord.conf restart all 这个命令重启网站。接着就出现问题了,搞了很久,没搞好就把服务器重装系统了,再部署一遍,现在就提示上面的错误。
具体的错误是:
xxxx: ERROR (no such file)
xxxx 是 program 的名字。

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

搜了很久都没解决,不知道有谁遇到过这样的问题?
Python中使用supervisor管理进程报错ERROR (no such file)如何解决


10 回复

-E uwsgi --ini /home/work/xxxx/uwsgi.ini

这是完整的命令?目测少了东西


这个问题通常是因为supervisor找不到你配置里指定的可执行文件。检查你的配置文件,确保command路径完全正确。

最常见的情况是用了相对路径,或者文件没有执行权限。给你个例子,假设你的程序叫my_app.py

# my_app.py
import time

def main():
    while True:
        print("App is running...")
        time.sleep(5)

if __name__ == "__main__":
    main()

对应的supervisor配置应该像这样:

; /etc/supervisor/conf.d/my_app.conf
[program:my_app]
command=/usr/bin/python3 /path/to/your/my_app.py  ; 这里要用绝对路径
directory=/path/to/your/  ; 程序的工作目录
autostart=true
autorestart=true
user=your_username
stdout_logfile=/var/log/my_app.log
stderr_logfile=/var/log/my_app_error.log

关键检查点:

  1. command里用绝对路径,别用python,用/usr/bin/python3这样的完整路径
  2. 确保文件存在且有执行权限:chmod +x /path/to/your/my_app.py
  3. 如果程序需要虚拟环境,在command里激活:/path/to/venv/bin/python /path/to/your/my_app.py
  4. supervisorctl rereadsupervisorctl update重新加载配置

总结:检查路径和权限。

类似这样
command = /path/bin --opt

命令的部分内容在 ini 文件中,我把这命令直接用 sudo 输在 cmd 中可以运行。

之前我也是这样配置的,都没有问题。不知道是哪个步骤错了。

我不知道我做了什么,现在好像没问题了。

我不知道我做了什么,现在又出现上面的错误了。

你 command 肯定写错了,自己检查下

有用 virtualenv 吗?

确实是 command 有问题,我删除了-E 就可以了。。。

回到顶部