Ubuntu20.04下Odoo自定义模块读取环境变量失败的解决方法
解决Odoo以odoo用户运行时无法读取/etc/environment环境变量的问题
问题原因
/etc/environment中的环境变量仅在用户交互式登录时由PAM模块加载,但Odoo通常通过systemd服务启动——这类非交互式系统进程不会自动读取该文件的变量,因此即便配置完成,odoo进程也无法获取到。
可行解决方案
方案1:修改Odoo的systemd服务配置(最直接)
- 找到Odoo的systemd服务文件,常见路径为
/etc/systemd/system/odoo.service或/lib/systemd/system/odoo.service - 用编辑器打开(例如
sudo nano /etc/systemd/system/odoo.service),在[Service]段落中添加以下内容:# 方式一:加载整个/etc/environment文件 EnvironmentFile=/etc/environment # 方式二:仅添加需要的特定变量(更推荐,避免无关变量干扰) # Environment="MY_CUSTOM_VAR=your_target_value" - 重新加载systemd配置并重启Odoo:
sudo systemctl daemon-reload sudo systemctl restart odoo
方案2:在Odoo配置文件中定义变量(更可控)
如果不想修改系统服务配置,可直接将变量写入Odoo的配置文件:
- 打开Odoo主配置文件(例如
/etc/odoo/odoo.conf) - 在文件末尾添加自定义变量,格式为
env_前缀+变量名:env_my_custom_var = your_target_value - 重启Odoo服务后,在自定义模块中通过Odoo内置方法获取:
from odoo.tools import config var_value = config.get('env_my_custom_var')
方案3:给odoo用户的非交互式shell配置变量(仅适用于手动启动Odoo场景)
如果是手动通过odoo用户启动Odoo(而非systemd服务),可修改用户shell配置:
- 切换到odoo用户:
sudo su - odoo - 编辑
~/.bash_profile或~/.profile,添加:export MY_CUSTOM_VAR=your_target_value - 执行
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
相关产品推荐
相关产品推荐

