2017-01-26 1 views
4

if [[ $(dspmq | grep '(Running)' | grep "$QMgr" | wc -l | tr -d " ") != 1 ]]Wie überprüft man, ob bereits ein Warteschlangenname in IBM MQ für Linux vorhanden ist oder nicht?

Der obige Code ist zu überprüfen, ob der WS-Manager läuft oder nicht.

Gibt es einen Befehl, um zu überprüfen, ob der angegebene Warteschlangenname im Warteschlangenmanager existiert oder nicht?

+0

Als Hinweis, wenn Sie eine Frage an die IBM MQ Produkt beziehen, fragen müssen Sie nur den Tag legen [IBM- mq]. Das [websphere] -Tag ist für Fragen zum Websphere Application Server gedacht. Das [mq] -Tag steht für allgemeine Nachrichtenwarteschlangenfragen. Das [ibm] -Tag ist für Fragen über die Firma IBM. – JoshMc

Antwort

4

Hinzufügen eines weiteren Vorschlags zusätzlich zu dem, was Rob und T.Rob gesagt haben.

MQ v7.1 und höher werden mit dem Befehl dmpmqcfg geliefert, mit dem Sie nach einer bestimmten Warteschlange suchen können.

Die folgenden Beispiele sind im Einklang mit Ihrer Probe, wenn ein WS-Manager überprüft ausgeführt wird:

dmpmqcfg zu verwenden, wenn eine Warteschlange Name, den Sie von jeder Art zu überprüfen, besteht dies tun könnte:

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

das Verfahren unter Verwendung Rob Parker zur Verfügung gestellt * wenn ein Warteschlangenname existiert jeglicher Art zu überprüfen:
* Anmerkung habe ich DISPLAY Q( statt DISPLAY QLOCAL(

if printf "DISPLAY Q(${QName})" | runmqsc ${QMgr} 2>&1 >/dev/null; then 
    echo "Queue ${QName} exists on Queue Manager ${QMgr} 
fi 

Ihr Beispiel Prüfung für einen WS-Manager Lauf dazu könnte vereinfacht:

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

Danke Sooo viel @JoshMc .. Du bist toll Man !!! –

+0

Es funktioniert gut @JoshMc –

+0

Verdammt Josh, du hast das unter mir rausgezogen * und * Rob! Ich denke, Sie bekommen den Dreh raus. ;-) –

3

Es gibt nicht einen bestimmten Befehl, aber man konnte verwenden:

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

Sie erhalten einen Return-Code von , wenn es nicht und existiert, wenn es funktioniert. Beachten Sie, dass der Warteschlangenmanager ausgeführt werden muss und Sie den Befehl als jemand ausführen müssen, der Zugriff auf den betreffenden Warteschlangenmanager hat. Andernfalls erhalten Sie andere Rückkehrcodes. (20 für Queue Manager nicht ausgeführt und nicht autorisiert)

Da Sie keinen bestimmten Warteschlangentyp angegeben haben, habe ich angenommen, dass Sie nach QLocal suchen, aber Sie können nach jedem Warteschlangentyp suchen, indem Sie den obigen Befehl ändern.

2

Zusätzlich zu dem, was Rob sagte, besteht die programmgesteuerte Methode darin, zu versuchen, die Warteschlange zu öffnen. Wenn die Warteschlange existiert, erhalten Sie entweder RC=0 oder RC=2 mit einem Reason Code von 2035 MQRC_NOT_AUTHORIZED. Wenn die Warteschlange nicht existiert, erhalten Sie RC=2 mit einem Reason Code von 2085 MQRC_UNKNOWN_OBJECT_NAME zurück.

Wenn jemand diese Warteschlange für die exklusive Eingabe geöffnet hat, können Sie sie nicht zur Eingabe öffnen, ohne einen Fehler zu erhalten, aber der Fehler weist zumindest darauf hin, dass die Warteschlange existiert. Um das zu umgehen, öffnen Sie die Warteschlange für die Anfrage, wenn Sie nur wissen müssen, dass sie existiert. Dadurch können Sie auch andere Attribute über die Abfrageoptionen der API entdecken.

Schließlich, wenn Sie Zugriff auf die Befehlswarteschlange haben, können Sie einen PCF-Befehl darauf ablegen, der DIS Q(<QUEUE NAME>) entspricht, den Rob erwähnte. Im Allgemeinen benötigen Geschäftsanwendungen keinen Zugriff auf die Befehlswarteschlange, aber Geschäftsanwendungen müssen normalerweise nicht danach fragen, ob ihre Warteschlange existiert oder nicht. Das ist eine Verwaltungsfunktion und die App findet entweder ihre Warteschlange oder einen schwerwiegenden Fehler. Als MQ-Administrator würde ich jede Geschäftsanwendung in Frage stellen, die nach Rechten zur Verwendung von runmqsc fragte, oder nach der Frage, ob die Warteschlange dort war, ob die Kanäle aktiv waren usw. Die meisten Geschäfte, in denen ich gearbeitet habe, ließen keine Business-App in Produktion mit diesem Design oder Privilegien. Auf der anderen Seite müssen Instrumentierungsanwendungen routinemäßig in der Lage sein, Dinge wie die Warteschlangeninventur anzufragen, so dass erwartet wird, dass sie Zugriff auf die Befehlswarteschlange für diese Funktion haben und diese verwenden können oder Zugriff auf runmqsc haben, um von Skripten anzufordern.

Verwandte Themen