我在服务器上使用Ubuntu 9.1(Karmic Koala)。
设置环境变量,使它们在所有进程中都可以全局访问的一个简单问题使我抓狂,希望对您有所帮助!
我尝试通过在几个不同的“通常可疑”位置(例如.bashrc,.bashrc,.profile)中使用export命令来设置它们。这些对外壳程序本身和从外壳程序中派生的进程很有用,但不适用于在外壳程序之外启动的进程(例如,守护程序在启动时启动,或者令我特别烦恼的是Capistrano启动的Mongrel似乎没有设置这些变量因此Ruby无法访问它们)。
我还尝试了一些疯狂的想法,例如在shell脚本中设置它们,并在启动时(通过update-rc.d方法)调用该脚本无济于事。
在Windows中,只需定义一个“系统变量”即可在OS中的所有进程中使用。在Linux中如何做到这一点?专门基于Debian的OS?
进程(包括外壳)仅从其父级继承变量。此后无法从外部更改它们。
尽可能在启动时(对于系统进程)或Shell调用(对于用户进程)尽早设置“全局变量”,或者辞职以在多个位置进行设置。
这看起来似乎很痛苦,但是更改另一个流程环境的能力将是一个错误,并会引入各种令人讨厌的竞争条件。
您要做什么才能获得“全局”环境变量?可能有解决您的问题的方法。
解决方法::以您最喜欢的shell格式编写一个最小的脚本,该脚本仅设置所需的变量并将其放置在全局可访问的位置:
/etc/loglocaltion.sh
:
export MY_LOG_DIR=/opt/share/mylog
export MY_DEFAULT_LOG_LEVEL=URGENT
对于要使用该配置的所有内容,请执行以下一项操作
source
非交互式登录文件(在shell的所有实例中都读取了该文件)中具有loglocation.sh的shell中启动它.bash_profile
。loglocation.sh
在启动实际程序之前,编写一个最小的包装脚本,该脚本可以提供资源。launchcorelogger.sh
: CORELOGGER=/opt/sbin/mycorelogger
source /etc/loglocation.sh
exec $CORELOGGER
并init
运行了脚本。
现在,如果您是在第一种情况下从全新的Shell中运行它们,或者使用dameon restart(/etc/init.d/mycorelogger restart
或其他方式)重新启动它们,则对loglocation脚本的编辑将影响所有相关处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句