我在同一台服务器上有一些 GO、Node 和 PHP 应用程序使用的变量。我试图将所有变量放入系统中,并使它们可供所有应用程序使用。
但是我尝试将变量放入 ~/.profile、etc/profile 和 /etc/environment 中,并且我可以通过终端访问它们,或者如果从终端运行脚本,但如果尝试使用主管运行,例如使用主管运行 go app 以及从 nginx 服务器运行的 PHP 脚本运行,似乎脚本找不到变量。
我是否遗漏了什么或者有更好的方法?
答案1
1. 个人资料和非交互式使用
profile
-files 仅在交互式 shell/环境中加载,因此如果命令以非交互式方式运行(例如nginx
在后台运行),则不会加载。因此,系统范围变量的唯一方法是/etc/environment
:
2.nginx
具体问题
nginx
实际上杀死了所有环境变量。nginx 文档
默认情况下,nginx 会删除从其父进程继承的除 TZ 变量之外的所有环境变量。
在您的nginx
-config中,使用env variable=value;
重新定义或env variable
从系统继承它。
3.supervisor
具体问题
从所以:环境变量是从运行它的 shell 继承的,如果从来没有,那么您将必须定义它们。
添加EnvironmentFile=/etc/environment
到systemd
的服务文件中supervisor
。我假设您是这样运行它的?