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

Linux 如何将runmqsc命令的输出优雅地放入适当的PHP变量中?,linux,command-line,bash,environment-variables,sed,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 QMN

我使用系统调用在一个简单的仪表板类型的显示中显示有关服务器资源的信息,这个显示是我在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. 最后,在适当设置$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=99999999,而PROCESS为null。不用说,我失败得很惨,不知道是否有人对如何做到这一点有任何想法

谢谢

你在这里重新发明轮子。MQ监控现在已经被很好地理解了,例如,这个Zabbix模板应该适合您:还有其他模板

你试过阵列吗?将所有内容转储到阵列中,并从阵列中取出所需的内容

% 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.