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

Ubuntu20.04下Odoo自定义模块读取环境变量失败的解决方法

解决Odoo以odoo用户运行时无法读取/etc/environment环境变量的问题

问题原因

/etc/environment中的环境变量仅在用户交互式登录时由PAM模块加载,但Odoo通常通过systemd服务启动——这类非交互式系统进程不会自动读取该文件的变量,因此即便配置完成,odoo进程也无法获取到。

可行解决方案

方案1:修改Odoo的systemd服务配置(最直接)

  1. 找到Odoo的systemd服务文件,常见路径为/etc/systemd/system/odoo.service或/lib/systemd/system/odoo.service
  2. 用编辑器打开(例如sudo nano /etc/systemd/system/odoo.service),在[Service]段落中添加以下内容:
    # 方式一:加载整个/etc/environment文件
    EnvironmentFile=/etc/environment
    # 方式二:仅添加需要的特定变量(更推荐,避免无关变量干扰)
    # Environment="MY_CUSTOM_VAR=your_target_value"
    
  3. 重新加载systemd配置并重启Odoo:
    sudo systemctl daemon-reload
    sudo systemctl restart odoo
    

方案2:在Odoo配置文件中定义变量(更可控)

如果不想修改系统服务配置,可直接将变量写入Odoo的配置文件:

  1. 打开Odoo主配置文件(例如/etc/odoo/odoo.conf)
  2. 在文件末尾添加自定义变量,格式为env_前缀+变量名:
    env_my_custom_var = your_target_value
    
  3. 重启Odoo服务后,在自定义模块中通过Odoo内置方法获取:
    from odoo.tools import config
    var_value = config.get('env_my_custom_var')
    

方案3:给odoo用户的非交互式shell配置变量(仅适用于手动启动Odoo场景)

如果是手动通过odoo用户启动Odoo(而非systemd服务),可修改用户shell配置:

  1. 切换到odoo用户:sudo su - odoo
  2. 编辑~/.bash_profile或~/.profile,添加:
    export MY_CUSTOM_VAR=your_target_value
    
  3. 执行source ~/.profile使配置生效,之后手动启动Odoo即可读取到变量。

验证方法

可在自定义模块中添加调试代码,打印当前进程的环境变量:

import os
import logging

_logger = logging.getLogger(__name__)

def check_env_var(self):
    _logger.info("当前进程环境变量:%s", os.environ)

或通过systemd命令查看Odoo服务的环境变量:

sudo systemctl show odoo | grep Environment

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:50:14