2

bash 属性を使用するときに not_if を実装しようとしています

WAS Deployment Manager を起動しようとしていますが、実行されていない場合にのみ、単純な 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

以下は、シェフ クライアントからのデバッグ ログです。

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)

どんな場合でも、常にスキップされます。

4

1 に答える 1

9

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

not_ifブロックがfalseを返すと、リソースが実行されます。bash の世界ではfalseは、bash スクリプトの終了コードが 0 でないことを意味します。

bash スクリプトが異なる終了コードで終了することを確認してください。awkなしで試すことができます:

ps -f | grep -v grep | grep dmgr

一致するものが見つからない場合、grep は 1 で終了するためです。

于 2013-06-10T09:34:21.307 に答える