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

Ubuntu服务模式下Python读取环境变量失败求助

解决Ubuntu服务中Python脚本无法读取环境变量的问题

我之前帮不少开发者处理过这个问题,本质是系统服务的运行环境和你登录shell的环境完全不同导致的,下面给你拆解原因和可行的解决方案:

问题根源

当你在控制台执行python3 myScript.py时,是在当前用户的shell会话里运行,系统会自动加载你的用户环境配置文件(比如~/.bashrc、~/.profile),所以脚本能读到你设置的Mongo URI这类变量。但Ubuntu默认用systemd管理服务,systemd服务会在一个极度精简的独立环境中启动,不会加载任何用户的环境配置,自然找不到你定义的变量。

可行解决方案

方案1:直接在服务配置文件中定义环境变量

这是最安全、最推荐的方式:

  1. 打开你的systemd服务文件(通常路径是/etc/systemd/system/your-service-name.service)
  2. 在[Service]段落中添加环境变量定义,格式如下:
    [Service]
    # 其他配置...
    Environment="MONGO_URI=mongodb://your-mongo-host:27017/your-db"
    # 如果有多个变量,可以添加多行Environment,或者用空格分隔(注意引号)
    # Environment="MONGO_URI=xxx" "OTHER_VAR=yyy"
    
  3. 重新加载systemd配置并重启服务:
    sudo systemctl daemon-reload
    sudo systemctl restart your-service-name
    

方案2:从专门的环境变量文件加载

如果你的环境变量较多,或者需要和其他脚本共享配置,可以用这种方式:

  1. 创建一个专门的环境变量文件,比如/etc/your-app/env.conf,内容格式为每行一个变量:
    MONGO_URI=mongodb://your-mongo-host:27017/your-db
    DB_USER=your-db-user
    DB_PASS=your-db-password
    
  2. 给这个文件设置严格的权限,避免敏感信息泄露:
    sudo chmod 600 /etc/your-app/env.conf
    sudo chown root:root /etc/your-app/env.conf
    
  3. 编辑服务文件,在[Service]段落添加:
    [Service]
    # 其他配置...
    EnvironmentFile=/etc/your-app/env.conf
    
  4. 同样重新加载配置并重启服务:
    sudo systemctl daemon-reload
    sudo systemctl restart your-service-name
    

方案3:加载用户的环境变量(不推荐)

如果一定要复用你当前用户的环境变量,可以这么做,但不建议,因为会引入不必要的环境变量,还可能带来权限问题:

  1. 编辑服务文件,修改ExecStart命令,让bash先加载用户配置再运行脚本:
    [Service]
    # 其他配置...
    ExecStart=/bin/bash -c 'source /home/your-username/.profile && python3 /path/to/myScript.py'
    # 替换成你的用户名和脚本路径
    Environment="HOME=/home/your-username"
    
  2. 重新加载配置并重启服务:
    sudo systemctl daemon-reload
    sudo systemctl restart your-service-name
    

额外检查

确认你的Python脚本读取环境变量的方式是正确的,比如用:

import os

mongo_uri = os.getenv("MONGO_URI")
if not mongo_uri:
    raise ValueError("MONGO_URI环境变量未设置")

内容的提问来源于stack exchange,提问作者Claudio Maldonado Parra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:02:33