You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fedora37下Flask+Nginx+Gunicorn的Systemd启动权限问题排查

Fedora 37下Flask+Nginx+Gunicorn部署:Systemd启动Gunicorn报权限拒绝(203/EXEC)

问题背景

在Fedora 37上部署Flask应用,搭配Nginx反向代理和Gunicorn。已创建Systemd单元文件和启动脚本,手动执行脚本可正常启动,Nginx反向代理也能工作,但Systemd启动Gunicorn服务时提示权限拒绝(状态码203/EXEC),怀疑是SELinux干扰。

相关配置与日志

Systemd单元文件

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=pretox
Group=pretox
WorkingDirectory=/home/pretox/ptox-metadata-manager
ExecStart=/home/pretox/ptox-metadata-manager/gunicorn_start

[Install]
WantedBy=multi-user.target

Gunicorn启动脚本

#!/usr/bin/env bash

. /home/pretox/ptox-metadata-manager/virtualenv/bin/activate
/home/pretox/ptox-metadata-manager/virtualenv/bin/gunicorn --timeout 120 --name ptox-metdata-manager --user pretox --group pretox --log-level debug --error-logfile /home/pretox/ptox-metadata-manager/error.log  --bind unix:/home/pretox/ptox-metadata-manager/ptox-metadata-manager.socket wsgi:app

Systemd启动失败日志

× gunicorn.service - gunicorn daemon
     Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; preset: disabled)
     Active: failed (Result: exit-code) since Wed 2023-01-25 09:51:22 GMT; 3s ago
   Duration: 4ms
    Process: 52572 ExecStart=/home/pretox/ptox-metadata-manager/gunicorn_start (code=exited, status=203/EXEC)
   Main PID: 52572 (code=exited, status=203/EXEC)
        CPU: 1ms

Jan 25 09:51:22 catoblepas systemd[1]: Started gunicorn.service - gunicorn daemon.
Jan 25 09:51:22 catoblepas systemd[52572]: gunicorn.service: Failed to locate executable /home/pretox/ptox-metadata-manager/gunicorn_start: Permission denied
Jan 25 09:51:22 catoblepas systemd[52572]: gunicorn.service: Failed at step EXEC spawning /home/pretox/ptox-metadata-manager/gunicorn_start: Permission denied
Jan 25 09:51:22 catoblepas systemd[1]: gunicorn.service: Main process exited, code=exited, status=203/EXEC
Jan 25 09:51:22 catoblepas systemd[1]: gunicorn.service: Failed with result 'exit-code'.

文件安全上下文信息

(virtualenv) [pretox@development ptox-metadata-manager]$ ls -Z gunicorn_start 
unconfined_u:object_r:user_home_t:s0 gunicorn_start

解决方案

1. 确认脚本执行权限

虽然手动能执行,仍可再次确认脚本的可执行权限:

chmod +x /home/pretox/ptox-metadata-manager/gunicorn_start

2. 调整SELinux安全上下文(核心解决方法)

脚本位于用户主目录,SELinux默认限制系统服务访问user_home_t类型的文件,可通过以下方式处理:

方式一:修改脚本SELinux上下文为bin_t(推荐,永久生效)

先临时修改上下文:

sudo chcon -t bin_t /home/pretox/ptox-metadata-manager/gunicorn_start

添加SELinux规则确保永久生效:

sudo semanage fcontext -a -t bin_t "/home/pretox/ptox-metadata-manager/gunicorn_start"
sudo restorecon -v /home/pretox/ptox-metadata-manager/gunicorn_start

方式二:临时关闭SELinux验证(仅用于排查)

如果不想修改上下文,可临时关闭SELinux验证是否为问题根源:

sudo setenforce 0

之后重启服务测试:

sudo systemctl restart gunicorn.service

若服务启动成功,说明确实是SELinux问题,建议用方式一修复,不要长期关闭SELinux。

3. 验证服务状态

修复后重新加载Systemd配置并启动服务:

sudo systemctl daemon-reload
sudo systemctl start gunicorn.service
sudo systemctl status gunicorn.service

内容的提问来源于stack exchange,提问作者knirirr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:50:16