【问题标题】:Reload environment variables PATH from chef recipes client从厨师食谱客户端重新加载环境变量 PATH
【发布时间】:2014-10-07 08:39:07
【问题描述】:

是否可以从厨师食谱中重新加载 $PATH?

我对以下线程中给出的进程信号的响应很感兴趣:

How to have Chef reload global PATH

我不太理解 omribahumi 用户给出的那个例子。 我想要一个更清晰的厨师客户/食谱示例来理解, 他解释说,似乎有可能使用这种解决方法。

谢谢。

【问题讨论】:

  • 您的用例是什么?也许有更简单的方法可以解决您的问题。

标签: path environment-variables chef-infra chef-recipe


【解决方案1】:

嗯,我看到这个请求有两个原因:

  • 在路径中添加一些内容以便立即执行 => 很简单,只需在 Chef 运行中更新 ENV['PATH'] 变量即可。

  • 扩展 PATH 系统范围以包含刚刚安装的内容。

对于 2,您可以更新 /etc/environment 文件(适用于 ubuntu)或将文件添加到 /etc/profiled.d(更好地控制它), 但显然,新的 PATH 变量对实际运行的进程(包括你的实际 shell)不可用,它将适用于文件更新后启动的进程。

为了多解释一点,您提供的链接是:

  1. 使用导出命令创建文件以设置环境变量

    echo 'export MYVAR="my value"' > ~/my_environment
    
  2. 创建一个从文件加载环境变量的 bash 函数

    function reload_environment { source ~/my_environment; }
    
  3. 在 bash 中设置一个陷阱来对信号做一些事情,这里在 bash 收到 SIGHUP 时运行该函数

    trap reload_environment SIGHUP
    
  4. 启动第一次获取 env 文件的功能,有两种方法:

    • 简单一:启动功能

      reload_environment
      
    • 复杂的一:获取实际 shell 的 pid 并向其发送 SIGHUP 信号

      kill -HUP `echo $$`
      

所有这些都只适用于当前的 shell,直到你在你的 .bash_rc 中设置它

确实不完全是您所要求的,但我希望您能理解无法更新已运行进程的上下文。

您可以做的最好的事情是:使用您希望的任何方法(例如 /etc/profile.d 中的内容)更新 PATH 并执行一堵墙(如果厨师以 root 身份运行)以告诉用户重新加载他们的环境

echo 'reload your shell env by executing: source /etc/profile' | wall

再一次,它可以为人类工作,而不是为其他已经运行的进程,必须重新启动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多