linux - 如何优雅地将 runmqsc 命令的输出放入适当的 PHP 变量中?

标签 linux command-line bash environment-variables sed

我正在使用系统调用在我在 php 中组合在一起的简单仪表板类型显示中显示有关服务器资源的信息。目前我正在使用 sed 来获取各个属性。所以获取当前深度的命令行是:

% echo 'DISPLAY QLOCAL('QUEUE.NAME') CURDEPTH' | runmqsc QMNAME
5724-H72 (C) Copyright IBM Corp. 1994, 2009.  ALL RIGHTS RESERVED.
Starting MQSC for queue manager QMNAME.


     1 : DISPLAY QLOCAL(QUEUE.NAME) CURDEPTH
AMQ8409: Display Queue details.
   QUEUE(QUEUE.NAME)            TYPE(QLOCAL)
   CURDEPTH(77)
One MQSC command read.
No commands have a syntax error.
All valid MQSC commands were processed.

Command to get just the value (77) via sed:

% echo 'DISPLAY QLOCAL('QUEUE.NAME') CURDEPTH' | runmqsc QMNAME | grep "CURDEPTH" | sed 's/.*CURDEPTH//' | tr -d '()'

77

最后,为了分配给变量,我在适当设置 $qn 和 $qm 后使用以下命令:

$curdepth = trim(shell_exec('echo \'DISPLAY QLOCAL(\''.$qn.'\') CURDEPTH\' | runmqsc '.$qm.' | grep "CURDEPTH(" | sed \'s/.*CURDEPTH//\' | tr -d \'()\''));

现在,我可以通过运行标准 DISPLAy mqsc 命令来获取所有变量:

% echo 'DISPLAY QLOCAL('QUEUE.NAME')' | runmqsc QMNAME
5724-H72 (C) Copyright IBM Corp. 1994, 2009.  ALL RIGHTS RESERVED.
Starting MQSC for queue manager QMNAME.


     1 : DISPLAY QLOCAL(QUEUE.NAME)
AMQ8409: Display Queue details.
   QUEUE(QUEUE.NAME)                       TYPE(QLOCAL)
   ACCTQ(QMGR)                             ALTDATE(2010-10-13)
   ALTTIME(15.48.06)                       BOQNAME( )
   BOTHRESH(0)                             CLUSNL( )
   CLUSTER(CLUSTERVV)                      CLWLPRTY(0)
   CLWLRANK(0)                             CLWLUSEQ(QMGR)
   CRDATE(2010-10-13)                      CRTIME(15.48.06)
   CURDEPTH(77)                            DEFBIND(OPEN)
   DEFPRTY(0)                              DEFPSIST(NO)
   DEFPRESP(SYNC)                          DEFREADA(NO)
   DEFSOPT(SHARED)                         DEFTYPE(PREDEFINED)
   DESCR( )                                DISTL(NO)
   GET(ENABLED)                            HARDENBO
   INITQ( )                                IPPROCS(0)
   MAXDEPTH(5000)                          MAXMSGL(4194304)
   MONQ(QMGR)                              MSGDLVSQ(PRIORITY)
   NOTRIGGER                               NPMCLASS(NORMAL)
   OPPROCS(1)                              PROCESS( )
   PUT(ENABLED)                            PROPCTL(COMPAT)
   QDEPTHHI(80)                            QDEPTHLO(20)
   QDPHIEV(DISABLED)                       QDPLOEV(DISABLED)
   QDPMAXEV(ENABLED)                       QSVCIEV(NONE)
   QSVCINT(999999999)                      RETINTVL(999999999)
   SCOPE(QMGR)                             SHARE
   STATQ(QMGR)                             TRIGDATA( )
   TRIGDPTH(1)                             TRIGMPRI(0)
   TRIGTYPE(FIRST)                         USAGE(NORMAL)
One MQSC command read.
No commands have a syntax error.
All valid MQSC commands were processed.

我已经尝试了几天,寻找一些优雅的方法来将每个属性的值分配给一个适当命名的变量,只需一个系统调用(因为它们很昂贵),所以即。 $CURDEPTH=77 和 $RETINTVL=999999999 并且 PROCESS 为空。不用说,我一直惨遭失败,并且想知道是否有人对如何做到这一点有任何想法。

谢谢!

最佳答案

  1. 您正在重新发明轮子。 MQ 监控现在已经很好理解了,例如这个 Zabbix 模板应该适合您:https://github.com/welvet/mqm_zabbix还有其他的。

  2. 你尝试过数组吗?将所有内容转储到 ARRAY 中并从数组中取出内容(您需要的内容)

关于linux - 如何优雅地将 runmqsc 命令的输出放入适当的 PHP 变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21811151/

相关文章:

linux - 当 grep "\\"XXFile 我得到 "Trailing Backslash"

Linux 上文本文件的 SQL 查询引擎?

command-line - 如何使用命令行转储Mysql数据库?

macos - 在 bash 脚本中重试命令行直到成功,然后继续脚本

regex - 使用 bash 按行和列 grep

linux - 使用 Linux 递归更改文件名?

linux - <命令行> :1:1: error: macro names must be identifiers

python - 记下进程停止时的停机时间

c - 如何使用命令行提供参数

linux - 如何有效地组织脚本以便将它们置于版本控制之下?