无法在厨师中使用not_if

时间:2013-06-07 19:43:18

标签: chef chef-recipe

我正在尝试在使用bash属性时实现not_if

我正在尝试启动WAS部署管理器,但只有当它没有运行时,我正在使用一个简单的grep命令来获取正在进行的进程的pid,正如您在下面的日志中看到的那样

#Start the DMGR process
bash "start-dmgr" do
  user "root"
  code %(#{node[:websphere][:was][:was_installLocation]}/bin/startManager.sh)
  not_if ("ps -f|grep dmgr|grep -v grep| awk {'print $2'}")
end

以下是来自Chef客户端的调试日志

当DMGR流程* 正在运行 *

[2013-06-07T15:13:54-04:00] DEBUG: Skipping bash[was-install-fixpacks] due to not_if command `/apps/websphere/ws70/bin/versionInfo.sh -maintenancePackages | grep `echo /mnt/newInstallers/WAS/APARs/7.0.0.19-WS-WAS-IFPM73674.pak | awk -F '-' '{print $4}' | awk -F '.' '{print $1}'``
Recipe: WAS_NPE::was_startdmgr
  * bash[start-dmgr] action run[2013-06-07T15:13:54-04:00] INFO: Processing bash[start-dmgr] action run (WAS_NPE::was_startdmgr line 2)
1973
 (skipped due to not_if)

当DMGR流程为* 未运行 *

[2013-06-07T15:31:03-04:00] DEBUG: Skipping bash[was-install-fixpacks] due to not_if command `/apps/websphere/ws70/bin/versionInfo.sh -maintenancePackages | grep `echo /mnt/newInstallers/WAS/APARs/7.0.0.19-WS-WAS-IFPM73674.pak | awk -F '-' '{print $4}' | awk -F '.' '{print $1}'``
Recipe: WAS_NPE::was_startdmgr
  * bash[start-dmgr] action run[2013-06-07T15:31:03-04:00] INFO: Processing bash[start-dmgr] action run (WAS_NPE::was_startdmgr line 2)
 (skipped due to not_if)

无论如何总是跳过它,我错过了什么

1 个答案:

答案 0 :(得分:9)

RTM:https://docs.chef.io/resource_common.html

not_if 块返回 false 时执行资源。在bash world中, false 表示bash脚本的退出代码不是0。

确保您的bash脚本以不同的退出代码退出。您可以在没有awk的情况下尝试:

ps -f | grep -v grep | grep dmgr

因为当没有找到匹配时,grep以1退出。