我需要编写一个Shell脚本来检查远程队列管理器中几个队列的队列深度。 远程队列管理器IBM Websphere Mq v8的版本。 有人可以建议吗?
答案 0 :(得分:3)
您可以执行以下操作:
1)创建一个mqsc文件,例如curdepth.mqsc,其中包含以下内容:
DIS QL(*) CURDEPTH
上面将显示所有队列的当前深度。如果您需要特定的队列,那么
DIS QL(<queue name>) CURDEPTH
您也可以在名称中使用通配符。
DIS QL(SW*) CURDEPTH
2)设置MQSERVER环境变量以指向远程队列管理器。例如:
SET MQSERVER=MQ_CHN/TCP/remotehost(1414)
3)通过您的Shell脚本
runmqsc -c <qmgr> < curdepth.mqsc
输出看起来像
AMQ8409I: Display Queue details.
QUEUE(SWIFTQ) TYPE(QLOCAL)
CURDEPTH(0)
4)然后解析命令的输出。
答案 1 :(得分:1)
嗯,我认为用Java(或C)编写MQ / PCF胜过使用Shell脚本来编写它更好。但是,如果必须的话,这是我早在2000年代就使用的一种,我称之为 chkQdepth.sh :
#!/bin/sh
#
# A shell script to check the queue depth and alert
# the user via email if it is too high.
#
# Parameters:
# $1=Queue manager
# $2=Queue name
# $3=alert threshold
# $4=mailing list
# $5=mail subject
# $6=mail message
#
if [ $# -ne 6 ] ; then exit; fi
QMGR="$1"
QUEUE="$2"
WARNING="$3"
MAILLIST="$4"
MAILSUB="$5"
MAILMSG="$6"
CURDEPTH=`/opt/mqm/bin/runmqsc $QMGR << EOF |sed -n '/CURDEPTH([0-9]*)/ {
s/.*CURDEPTH(\([0-9]*\))/\1/
p
}'
DISPLAY QUEUE($QUEUE) CURDEPTH
end
EOF`
if [ "x$CURDEPTH" != "x" ] ; then
if [ $CURDEPTH -gt $WARNING ] ; then
echo "Queue has more than $WARNING message(s)"
mail -t $MAILLIST << EOF
Subject: $5
$6
Queue Manager: $QMGR
Queue Name: $QUEUE
Current queue depth is $CURDEPTH messages
Alerting Threshold is $WARNING
EOF
else
echo "Queue depth is equal to or less than $WARNING. (Current queue depth is $CURDEPTH messages)"
fi
else
echo "Queue depth not available"
fi
exit 0
该脚本需要6个输入参数:
您可以手动运行脚本,但是最好进行设置以使调度程序运行该脚本,例如每5分钟运行一次。 Unix / Linux上的大多数人都将使用CRON,因此这是crontab条目:
0-59/5 * * * * /some/path/mqtools/chkQdepth.sh MQA1 TEST.Q1 50 roger@acme.com "Alert: Test.Q1 has too many messages." "Please check application XYZ as queue TEST.Q1 has too many messages in it." >/dev/null 2>&1