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

使用systemd启动virtualenv环境中Python脚本提示Permission denied怎么解决

排查与解决步骤

1. 检查全路径执行权限

仅给虚拟环境内的Python二进制设置777权限没用,需要确保从根目录到Python二进制的每一级父目录,都对配置文件中指定的User用户开放执行(x)权限,systemd启动时需要逐层访问到目标二进制文件:

# 查看全路径的权限配置
namei -l /home/<my-user>/.virtualenvs/myvenv/bin/python

如果中间某一级目录缺少执行权限,执行下方命令补全权限即可:

chmod o+x /home/<my-user>/.virtualenvs /home/<my-user>/.virtualenvs/myvenv /home/<my-user>/.virtualenvs/myvenv/bin

2. 排查SELinux限制

Fedora系统默认开启SELinux,默认规则会禁止系统级systemd服务执行用户家目录下的二进制文件,这是该场景下最常见的报错原因。你可以先临时关闭SELinux验证是否为该问题导致:

setenforce 0
# 重载配置后重启服务测试
systemctl daemon-reload
systemctl restart test.service

如果测试后服务可以正常启动,不要直接永久关闭SELinux,给虚拟环境的Python二进制添加对应安全上下文即可:

semanage fcontext -a -t bin_t '/home/<my-user>/.virtualenvs/myvenv/bin/python(\..*)?'
restorecon -Rv /home/<my-user>/.virtualenvs/myvenv/bin/
# 恢复SELinux开启状态
setenforce 1

3. 服务配置优化

你当前的服务配置逻辑没有问题,有两个细节调整可以避免后续异常:

  • 自定义服务不要放在/usr/lib/systemd/system/目录下,该目录为系统默认服务的存放路径,自定义服务建议放在/etc/systemd/system/目录下
  • 你当前的ExecStart写法已经可以直接调用虚拟环境内的Python,不需要额外配置PATH环境变量

4. 最终验证

完成上述调整后执行以下命令验证服务状态:

systemctl daemon-reload
systemctl start test.service
systemctl status test.service

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:15:01