厨师执行资源不适用于 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
资源。
您可以尝试两种选择:
执行命令时设置环境变量PATH
:
execute 'DNS Recording with Centrify' do
command 'addns -U -m'
user 'root'
environment(
{ 'PATH' => ENV['PATH'] }
)
end
或使用 default_env
属性 资源来查看是否使 PATH
可用:
execute 'DNS Recording with Centrify' do
command 'addns -U -m'
user 'root'
default_env true
end
我正在使用食谱食谱中的执行资源。食谱在 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
资源。
您可以尝试两种选择:
执行命令时设置环境变量
PATH
:execute 'DNS Recording with Centrify' do command 'addns -U -m' user 'root' environment( { 'PATH' => ENV['PATH'] } ) end
或使用
default_env
属性 资源来查看是否使PATH
可用:execute 'DNS Recording with Centrify' do command 'addns -U -m' user 'root' default_env true end