gpt4 book ai didi

ibm-mq - Websphere MQ 死信队列处理程序失败

转载 作者:行者123 更新时间:2023-12-02 05:20:40 25 4
gpt4 key购买 nike

我正在尝试使用以下字符串在 Linux 机器上创建一个死信队列处理程序

DEFINE SERVICE(dlqhandler) + CONTROL(MANUAL) + DESCR('DLQ Handler Service') + 
SERVTYPE(SERVER) + STARTCMD('/home/mqm/dlq/dlqhandler.sh') +
STDOUT('/home/mqm/dlq/dlq.log') +
STDERR('/home/mqm/dlq/dlq.err') +
REPLACE

但是服务无法启动。有人对此有任何想法吗?

问候J

最佳答案

这与 WebSphere MQ 执行命令的方式有关。当您从 shell 程序执行文本文件时,为了方便起见,shell 会在文件头部查找 shebang 行,以获取要运行哪个可执行文件的线索。然后它运行指定的程序并将文件作为参数传递。因此,例如,如果您运行 /home/mqm/dlq/dlqhandler.sh脚本中的第一行是 #! /bin/sh你的 shell 会将其转换为 /bin/sh /home/mqm/dlq/dlqhandler.sh代表您并提交。效果是启动一个新的子 shell 并将您的脚本文件作为参数传递给它。

WebSphere MQ 使用操作系统直接执行您在 STARTCMD 中放入的任何内容。 field 。 shell 没有方便的替换,因此如果您指定的是脚本,操作系统不知道如何处理它。更改为STARTARG(/bin/sh /home/mqm/dlq/dlqhandler.sh)不会有帮助,因为操作系统不会将其视为命令和参数,而是将其视为带有嵌入空格的命令。

但是,WebSphere MQ 确实提供了 STARTARG用于此目的的参数。如果您更改为使用以下命令(假设您的脚本的 shebang 行执行 /bin.sh ),它应该可以工作:

DEFINE SERVICE(dlqhandler) + 
CONTROL(MANUAL) DESCR('DLQ Handler Service') +
SERVTYPE(SERVER) STARTCMD('/bin/sh') +
STARTARG('/home/mqm/dlq/dlqhandler.sh') +
STDOUT('/home/mqm/dlq/dlq.log') +
STDERR('/home/mqm/dlq/dlq.err') +
REPLACE

更新:
经过一些测试,我们发现 Linux 服务器被配置为运行受限 shell。这阻止了传递带有路径名的参数,以及与此问题相关的执行共享驱动器上托管的任何内容,例如 /hom/mqm 。在受限环境中,将脚本和日志移动到 /var/mqm 下的目录问题解决了。

在测试过程中,我们能够使用 shell 内置命令来隔离问题。这些没有路径或权限问题,因此排除了文件系统权限等问题。例如,STARTCMD('/bin/sh') STARTARG('-c "echo It works"')告诉我们 QMgr 能够调用 /bin/sh正确。将脚本更改为单行 echo It works failed 这告诉我们问题不是脚本的内容而是脚本本身。使用STARTARG('-c set')工作并向我们展示了当前目录的位置以及 $PATH 的内容。将脚本移动到当前目录解决了权限问题,并且一些进一步的实验表明它不是 /在失败的脚本路径中。我们看到 /home/mqm 之间唯一明显的区别和/var/mqm一个是共享的,一个是专用的。最终的服务定义是:

DEFINE SERVICE(dlqhandler) +
CONTROL(QMGR) DESCR('DLQ Handler Service') +
SERVTYPE(SERVER) STARTCMD('/bin/sh') +
STARTARG('-c "+MQ_INSTALL_PATH+bin/runmqdlq < +MQ_DATA_PATH+subdir/+QMNAME+.rules.table"') +
STDOUT('+MQ_DATA_PATH+subdir/dlq.+QMNAME+.log') +
STDERR('+MQ_DATA_PATH+subdir/dlq.+QMNAME+.err') +
STOPCMD('+MQ_INSTALL_PATH+bin/amqsstop') +
STOPARG('-m +QMNAME+ -p +MQ_SERVER_PID+') +
REPLACE

替换subdir上面是规则文件的路径。例如,+MQ_DATA_PATH+subdir/+QMNAME+.rules.table可能是+MQ_DATA_PATH+exits/+QMNAME+.rules.table预计规则文件位于 /var/mqm/exits在默认安装的原生 Linux 上。

关于ibm-mq - Websphere MQ 死信队列处理程序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13138988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com