Flask搭配uWSGI在Ubuntu上配置系统服务报203权限错误求助
问题根因分析
你当前触发203/EXEC权限错误的直接原因是systemd服务配置中ExecStart指向的/usr/local/bin/radioland/radioland是目录而非uWSGI可执行文件,系统无法执行目录类型的文件。另外Ubuntu 20.04默认未启用SELinux,你之前的SELinux拦截猜想不成立,无需往该方向排查。
修复步骤
- 第一步:修正systemd服务配置
/etc/systemd/system/radioland.service,根据你目录下存在myprojectenv虚拟环境的实际情况,修改后配置如下:
[Unit] Description=uWSGI instance to serve myproject After=network.target [Service] User=azureuser Group=www-data # 替换为你的项目根目录(存放wsgi.py的目录) WorkingDirectory=/usr/local/bin/radioland # 替换为虚拟环境的bin目录路径 Environment="PATH=/usr/local/bin/radioland/myprojectenv/bin" # 填写uWSGI可执行文件的完整路径,后面接ini文件的完整路径避免路径错误 ExecStart=/usr/local/bin/radioland/myprojectenv/bin/uwsgi --ini /usr/local/bin/radioland/radioland.ini [Install] WantedBy=multi-user.target
- 第二步:给uWSGI可执行文件添加执行权限,执行命令:
chmod +x /usr/local/bin/radioland/myprojectenv/bin/uwsgi - 第三步:重置目录权限,删除777高危权限配置,执行命令:
chown -R azureuser:www-data /usr/local/bin/radioland chmod -R 755 /usr/local/bin/radioland
- 第四步:重新加载systemd配置并重启服务,执行命令:
systemctl daemon-reload systemctl start radioland.service
- 第五步:如果仍然报错,临时关闭AppArmor验证是否为规则拦截,执行命令:
systemctl stop apparmor
如果关闭后服务正常启动,新增AppArmor允许uWSGI执行的规则即可,无需长期关闭AppArmor。
内容的提问来源于stack exchange,提问作者wnjl
相关产品推荐
相关产品推荐

