Ubuntu系统下通过.service文件实现Gunicorn实例开机自启的问题排查
解决Gunicorn Systemd服务启动失败(权限拒绝/203/EXEC)问题
我来帮你排查这个启动失败的问题,从错误日志和你的配置文件来看,主要是命令配置错误和目录权限不匹配导致的,一步步来修正:
1. 修复ExecStart的核心错误
你当前的ExecStart配置明显有问题:
ExecStart=/bin/bash /root/apps/FrenchNoodle-flask-venv/FrenchNoodle-flask-venv/bin --workers 3 --bind unix:FrenchNoodles-flask.sock wsgi:app
这里犯了两个错:
- 用
bash去执行一个目录路径(/root/apps/.../bin是虚拟环境的bin目录,不是可执行文件),这肯定会触发执行错误 - 路径多写了一层
FrenchNoodle-flask-venv,你的虚拟环境根目录是/root/apps/FrenchNoodle-flask-venv,所以bin目录直接在它下面,不需要重复嵌套
正确的写法是直接调用虚拟环境里的gunicorn二进制文件,参数跟在后面:
ExecStart=/root/apps/FrenchNoodle-flask-venv/bin/gunicorn --workers 3 --bind unix:FrenchNoodles-flask.sock wsgi:app
2. 修正工作目录和环境变量
你的wsgi.py在/root/apps/FrenchNoodle-flask-venv/FrenchNoodle-flask目录下,所以WorkingDirectory应该指向这个项目代码目录,而不是虚拟环境根目录:
WorkingDirectory=/root/apps/FrenchNoodle-flask-venv/FrenchNoodle-flask
同时环境变量里的PATH也可以简化,直接指向虚拟环境的bin目录即可:
Environment="PATH=/root/apps/FrenchNoodle-flask-venv/bin"
3. 修复目录权限问题
错误日志里的Permission denied,除了命令错误的因素,还要确保www-data组能访问你的项目和虚拟环境目录,执行以下命令修改权限:
chown -R root:www-data /root/apps/FrenchNoodle-flask-venv chmod -R 750 /root/apps/FrenchNoodle-flask-venv
4. 重新加载配置并启动服务
做完以上修改后,重新加载systemd配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart FrenchNoodles-flask-gunicorn.service # 查看服务状态确认是否正常运行 sudo systemctl status FrenchNoodles-flask-gunicorn.service
完整修正后的配置文件
替换你现有的/etc/systemd/system/FrenchNoodles-flask-gunicorn.service内容:
[Unit] Description=Gunicorn instance to serve FrenchNoodle-flask After=network.target [Service] User=root Group=www-data WorkingDirectory=/root/apps/FrenchNoodle-flask-venv/FrenchNoodle-flask Environment="PATH=/root/apps/FrenchNoodle-flask-venv/bin" ExecStart=/root/apps/FrenchNoodle-flask-venv/bin/gunicorn --workers 3 --bind unix:FrenchNoodles-flask.sock wsgi:app [Install] WantedBy=multi-user.target
如果还是遇到问题,可以用以下命令查看实时日志,获取更详细的错误信息:
journalctl -u FrenchNoodles-flask-gunicorn.service -f
内容的提问来源于stack exchange,提问作者French Noodles
相关产品推荐
相关产品推荐

