bha*_*inb 6 unix debian environment-variables
我在我的服务器上使用 Ubuntu 9.1 (Karmic Koala)。
设置环境变量以便它们在所有进程中全局可用的简单问题让我发疯,我希望得到一些帮助!
我已经尝试在几个不同的“常见嫌疑人”位置(例如 .bashrc、.bashrc、.profile)中使用导出命令来设置它们。这些对 shell 本身非常有用,并且进程从 shell 分叉出来,但不适用于在 shell 外启动的进程(例如,守护进程在启动时启动,或者对我来说特别烦人的是 Capistrano 启动的 Mongrel 似乎没有设置这些变量因此 Ruby 无法访问它们)。
我还尝试了一些疯狂的想法,例如将它们设置在 shell 脚本中并在启动时调用此脚本(通过 update-rc.d 方法),但无济于事。
在 Windows 中,可以简单地定义一个“系统变量”,该变量在操作系统中的所有进程中都可用。在 Linux 中如何做到这一点?特别是基于 Debian 的操作系统?
进程(包括 shell)只从它们的父进程继承变量。此后无法从外部更改它们。
尽可能早地在引导(对于系统进程)或 shell 调用(对于用户进程)中设置“全局变量”,或者让自己在多个位置设置它们。
这可能看起来很痛苦,但改变另一个进程环境的能力将是一个错误,并且会引入各种令人讨厌的竞争条件。
你想做什么想要“全局”环境变量?可能有办法解决您的问题。
解决方法:以您最喜欢的 shell 格式编写一个最小的脚本,只设置您想要的变量并将其放在全局可访问的位置:
/etc/loglocaltion.sh:
export MY_LOG_DIR=/opt/share/mylog
export MY_DEFAULT_LOG_LEVEL=URGENT
Run Code Online (Sandbox Code Playgroud)
对于您想要使用该配置的所有内容,请执行以下操作之一
source在它的非交互式登录文件中有ed loglocation.sh (为所有shell 实例读取的文件,即.bash_profile)。loglocation.sh在启动真正的程序之前编写一个最小的包装脚本。launchcorelogger.sh:
CORELOGGER=/opt/sbin/mycorelogger
source /etc/loglocation.sh
exec $CORELOGGER
Run Code Online (Sandbox Code Playgroud)
并init运行了脚本。
现在,如果您在第一种情况下从新的 shell 运行它们或使用重新启动的系统 dameon(/etc/init.d/mycorelogger restart或其他方式)重新启动它们,那么对 loglocation 脚本的编辑将影响所有相关的处理。
| 归档时间: |
|
| 查看次数: |
26146 次 |
| 最近记录: |