2017-01-26 19 views
4

if [[ $(dspmq | grep '(Running)' | grep "$QMgr" | wc -l | tr -d " ") != 1 ]]すでにキュー名が存在するかどうかを確認する方法はありますか?

上記のコードは、キューマネージャが動作しているかどうかを確認するためのコードです。

指定されたキュー名がキュー・マネージャーに存在するかどうかを確認するコマンドはありますか?

+0

[ibm- mq]。 [websphere]タグは、Websphere Application Serverに関連する質問用です。 [mq]タグは、一般的なメッセージキューの質問用です。 [ibm]タグはIBM社に関する質問です。 – JoshMc

答えて

4

RobとT.Robの言葉に加えて、別の提案を追加します。

MQ v7.1以降にはdmpmqcfgコマンドが付属しており、これを使用して特定のキューをチェックできます。

を任意のタイプのキュー名は、あなたがこれを行うことが存在するかどうかを確認するためにdmpmqcfg使用するには:以下

例は、キュー・マネージャが実行されているかどうかを確認するあなたのサンプルと一致している

if dmpmqcfg -m ${QMgr} -t queue -x object -o 1line -n ${QName}|egrep '^DEFINE '; then 
    echo "Queue ${QName} exists on Queue Manager ${QMgr} 
fi 

ロブ・パーカーは、あらゆるタイプのキュー名が存在するかどうかをチェックするために*を提供する方法で使用:
*注意を私はDISPLAY Q(代わりのDISPLAY QLOCAL(

を使用キュー・マネージャ・実行するためのあなたの例のチェックは、このように単純化することができ
if printf "DISPLAY Q(${QName})" | runmqsc ${QMgr} 2>&1 >/dev/null; then 
    echo "Queue ${QName} exists on Queue Manager ${QMgr} 
fi 

:あなたが唯一のタグを配置する必要がありIBM MQ製品に関連した質問をしている場合は注意点としては

if dspmq -m ${QMgr}| grep --quiet '(Running)'; then 
    echo "Queue Manager ${QMgr} is Running" 
fi 
+0

ありがとうSooo @ JoshMc ..あなたは素晴らしい人です! –

+0

それはうまく動作@JoshMc –

+0

くそージョシュ、あなたは私の下からその1つを引っ張った*と*ロブ!私はあなたがこれのハングを取得していると思う。 ;-) –

3

あり、特定のコマンドではありませんが、あなたは使用することができます

printf "DISPLAY QLOCAL(<QUEUE NAME>)" | runmqsc <QM Name> 

それがない場合、それは0存在し、ていない場合は、のリターンコードを取得します。注意すべき点として、キューマネージャが実行されていなければなりません。問題のキューマネージャにアクセスできる人としてコマンドを実行する必要があります。そうしないと、異なる戻りコードが返されます。 (キューマネージャが実行されておらず、許可されていない場合は20)

特定のキュータイプを指定していない場合は、QLocalを探していると仮定していますが、上記のコマンドを変更してキュータイプを検索できます。

2

Robが述べたことに加えて、これをプログラムで実行する方法は、キューを開こうとすることです。キューが存在する場合はRC=0またはRC=2のいずれかになり、理由コード2035 MQRC_NOT_AUTHORIZEDとなります。キューが存在しない場合は、理由コード2085 MQRC_UNKNOWN_OBJECT_NAMERC=2が返されます。

他の誰かがそのキューを排他的な入力用に開いている場合は、エラーなしでそれを開くことはできませんが、少なくともそのエラーはキューが存在することを示します。あなたが必要とするものがあればそれが存在するかどうかを知ることで、問合せのためにキューを開くことができます。また、APIの照会オプションを使用して、他の属性を検出することもできます。

最後に、コマンドキューにアクセスできる場合、Robに言及したDIS Q(<QUEUE NAME>)に相当するPCFコマンドをドロップすることができます。一般的に、ビジネスアプリケーションはコマンドキューにアクセスする必要はありませんが、通常、ビジネスアプリケーションはキューが存在するかどうかを照会する必要はありません。これは管理機能であり、アプリケーションはキューを見つけたり致命的なエラーを投げたりします。 MQ Adminとして、runmqscを使用する権利を要求されたか、そのキューが存在するかどうか、そのチャネルがアップしているかどうかを問うビジネスアプリケーションに質問しました。私が仕事をしていたほとんどのショップは、その設計または特権を持つ。一方、インスツルメンテーションアプリケーションでは、キューインベントリのようなものに問い合わせる必要があるため、コマンドキューにアクセスしてその機能を使用することが期待されるか、またはrunmqscにアクセスしてスクリプトから問い合わせを受ける必要があります。

関連する問題