通过pm2启动的Python应用无法读取环境变量的问题排查
解决pm2启动Python脚本无法读取~/.bashrc环境变量的问题
原因说明
~/.bashrc仅在交互式登录Shell中加载,pm2启动的进程属于非交互式非登录Shell,因此无法读取该文件中的环境变量。
解决方法
方法一:将环境变量写入系统全局配置文件
- 编辑/etc/environment文件:
sudo nano /etc/environment - 在文件末尾添加(注意不要加
export):KEY="123asd" - 保存退出后,重启pm2进程:
若仍不生效,可重启服务器确保全局变量加载。pm2 restart main
方法二:启动pm2时直接传递环境变量
临时启动传递
使用以下命令启动,直接携带环境变量:
pm2 start main.py --interpreter=python3 --env KEY="123asd"
永久配置到pm2生态文件
- 生成pm2配置文件:
pm2 init - 编辑生成的
ecosystem.config.js,修改env字段:module.exports = { apps : [{ name: "main", script: "./main.py", interpreter: "python3", env: { KEY: "123asd" } }] } - 使用配置文件启动:
pm2 start ecosystem.config.js
方法三:让pm2加载~/.bashrc后启动脚本
修改pm2启动命令,先加载~/.bashrc再执行Python脚本:
pm2 start main.py --interpreter=bash -- -c 'source ~/.bashrc && python3 main.py'
或者写入pm2配置文件永久生效:
module.exports = { apps : [{ name: "main", script: "-c", args: "source ~/.bashrc && python3 main.py", interpreter: "bash" }] }
内容的提问来源于stack exchange,提问作者Roggic
相关产品推荐
相关产品推荐

