厨师执行资源不适用于 Rhel 8

chef execute resource does not working on Rhel 8

我正在使用食谱食谱中的执行资源。食谱在 cli 上调用时正常工作。该食谱不适用于 cron。我在下面发送错误日志;

* execute[DNS Recording with Centrify] action run
    
    ================================================================================
    Error executing action `run` on resource 'execute[DNS Recording with Centrify]'
    ================================================================================
    
    Errno::ENOENT
    -------------
    No such file or directory - addns
    
    Resource Declaration:
    ---------------------
    # In /var/chef/cache/cookbooks/rhel8/recipes/centrify.rb
    
     48:                        execute 'DNS Recording with Centrify' do
     49:                                 command 'addns -U -m'
     50:                                user "root"
     51:                                 ignore_failure false
     52:                        end
     53:                end
    
    Compiled Resource:
    ------------------
    # Declared in /var/chef/cache/cookbooks/rhel8/recipes/centrify.rb:48:in `from_file'
    
    execute("DNS Recording with Centrify") do
      action [:run]
      default_guard_interpreter :execute
      command "addns -U -m"
      declared_type :execute
      cookbook_name "rhel8"
      recipe_name "centrify"
      domain nil
      user "root"
    end

找到原因了。出现原因是因为使用了不同的 PATH。 cookbook 在 cli 和不同的 cron 中使用不同的 PATH。 cli 路径中的 Mycommand 二进制文件。我不能使用静态 PATH,因为 cli PATH 根据 OS、verison 和 distribution 发生变化。

如何根据所有linux在食谱中设置cli PATH?

此致

从问题看来,您希望 PATH 环境变量可用于 execute 资源。

您可以尝试两种选择:

  1. 执行命令时设置环境变量PATH:

    execute 'DNS Recording with Centrify' do
      command 'addns -U -m'
      user 'root'
      environment(
        { 'PATH' => ENV['PATH'] }
      )
    end
    
  2. 或使用 default_env 属性 资源来查看是否使 PATH 可用:

    execute 'DNS Recording with Centrify' do
      command 'addns -U -m'
      user 'root'
      default_env true
    end