AWS EC2中Systemd部署Gunicorn提示找不到'app'模块求助
解决EC2上systemd启动Gunicorn找不到app模块的问题
核心问题原因
systemd服务运行时的工作目录、Python虚拟环境路径和你手动在venv里操作的环境不一致,导致Gunicorn找不到app模块。下面是针对性的解决步骤:
1. 修正systemd服务文件配置
打开你的systemd服务文件(通常在/etc/systemd/system/目录下,比如helloworld.service),确保以下关键配置正确:
[Unit] Description=Gunicorn instance to serve helloworld Flask app After=network.target [Service] # 指定运行服务的用户,和你手动操作的用户一致 User=ec2-user # 设置工作目录为app.py所在的绝对路径 WorkingDirectory=/home/ec2-user/helloworld # 使用虚拟环境里的Gunicorn绝对路径,指定启动模块(app.py里的Flask实例名为app的话,就是app:app) ExecStart=/home/ec2-user/helloworld/venv/bin/gunicorn --workers=3 --bind=0.0.0.0:5000 app:app [Install] WantedBy=multi-user.target
关键配置说明:
WorkingDirectory:必须设为app.py所在的目录,确保Gunicorn能找到该目录下的模块ExecStart:必须用虚拟环境内Gunicorn的绝对路径,避免调用系统全局的Python环境;app:app表示加载当前工作目录下app.py文件里名为app的Flask实例
2. 重新加载并重启服务
执行以下命令使配置生效:
# 重新加载systemd配置 sudo systemctl daemon-reload # 重启服务 sudo systemctl restart helloworld # 查看服务状态 sudo systemctl status helloworld # 实时查看日志排查问题 journalctl -u helloworld -f
3. 额外排查点
- 文件权限检查:确保
ec2-user对/home/ec2-user/helloworld目录及app.py有读写权限,执行ls -l /home/ec2-user/helloworld确认权限 - 虚拟环境依赖验证:进入虚拟环境重新安装依赖,避免遗漏:
cd /home/ec2-user/helloworld source venv/bin/activate pip install flask gunicorn deactivate - 避免相对路径:所有路径都用绝对路径,不要用
./之类的相对路径,防止systemd工作目录变化导致路径错误
内容的提问来源于stack exchange,提问作者DevAntho
相关产品推荐
相关产品推荐

