从厨师食谱客户端重新加载环境变量PATH

时间:2014-08-13 20:23:04

标签: path environment-variables chef chef-recipe

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

我对以下主题中给出的关于过程信号的响应进行了抨击:

How to have Chef reload global PATH

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

感谢。

1 个答案:

答案 0 :(得分:0)

我发现这个请求有两个原因:

  • 在路径中添加一些内容以立即执行=>很容易,只需更新厨师运行中的ENV ['PATH']变量。

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

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

为了解释一下您所做的更多的链接:

  1. 使用导出命令创建一个文件以设置env变量

    echo 'export MYVAR="my value"' > ~/my_environment
    
  2. 创建一个bash函数从文件中加载env变种

    function reload_environment { source ~/my_environment; }
    
  3. 在bash中设置陷阱以对信号执行某些操作,此处在bash接收SIGHUP时运行该函数

    trap reload_environment SIGHUP
    
  4. 启动env文件首次采购的功能,有两种方式:

    • 简单的一个:启动功能

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

      kill -HUP `echo $$`
      
  5. 所有这些仅适用于当前的shell,直到您在.bash_rc

    中设置它为止

    确实不是你要求的,但我希望你能理解,没有办法更新已经运行的过程的上下文。

    你能做的最好的事情是:用你想要的任何方法更新PATH(例如/etc/profile.d中的例子)并执行一个墙(如果厨师以root身份运行)告诉用户重新加载他们的envs

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

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