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

时间:2014-02-10 15:34:15

标签: 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.

通过sed获取值(77)的命令:

% 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 个答案:

答案 0 :(得分:0)

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

  2. 你试过阵列吗?将所有内容转储到ARRAY中并从阵列中取出内容(您需要的东西)