在表内创建循环。 PHP

时间:2018-06-08 04:48:06

标签: php html

我试图显示某些进程是否在PHP中运行,从txt文件中获取进程名称



<table style="width:959px;" border="3" cellspacing="1" cellpadding="1">
<tr>
 
<td style="background-color:#A4A4A4;">
<b><font face="Arial, Helvetica, sans-serif">Service Name</font></b>
</td>
<td style="background-color:#A4A4A4;">
<b><font face="Arial, Helvetica, sans-serif">Source Channel ID</font></b>
</td>

    <td style="background-color:#A4A4A4;">
<b><font face="Arial, Helvetica, sans-serif">Webhook</font></b>
</td>
 
<td style="background-color:#A4A4A4;">
<b><font face="Arial, Helvetica, sans-serif">Status</font></b>
</td>
</tr>

<?php

    

$procfiles = file("proc.txt");
    
    foreach ($procfiles as $profile){
        $pro = explode("^", $profile);
        exec("ps -aux | grep $pro[0] 2>&1", $output);

if (count($output) > 2) {
    ?>
    <tr>
<td style="background-color:#E0A701;" ><?php echo $pro[0]; ?></td>
<td style="background-color:#E0A701;" ><?php echo $pro[1]; ?></td>
<td style="background-color:#E0A701;" > <div style="width: 500px; height: 40px; overflow: auto"><li><?php echo $pro[2]; ?></li></div></td>
<td style="background-color:#03D12F;">Running</td>
</tr>
    
<?php
    }
            else{
    ?>             
    <tr>
<td style="background-color:#E0A701;" ><?php echo $pro[0]; ?></td>
<td style="background-color:#E0A701;" ><?php echo $pro[1]; ?></td>
<td style="background-color:#E0A701;" > <div style="width: 500px; height: 40px; overflow: auto"><li><?php echo $pro[2]; ?></li></div></td>
<td style="background-color:#EF3636;">Not Running</td>
</tr>
    <?php
        }
    }
    ?>
&#13;
&#13;
&#13;

proc.txt enter image description here

结果 enter image description here

问题是这些进程都没有运行。它检查bot1.js是否正在运行或不正常,如果我启动bot1.js它会说它正在运行,如果我停止它不运行。但是bot2.js和bot3.js,它总是表示它正在运行,即使它没有。我猜我每次必须让它运行exec?我该怎么做呢? 干杯

添加了print_r($ output);

结果:

Array ( 
  [0] => www-data 3670 0.0 0.0 4592 936 ? S 07:38 0:00 sh -c ps -aux | grep bot1.js 2>&1 
  [1] => www-data 3672 0.0 0.0 11396 1088 ? S 07:38 0:00 grep bot1.js 
) 
Array ( 
  [0] => www-data 3670 0.0 0.0 4592 936 ? S 07:38 0:00 sh -c ps -aux | grep bot1.js 2>&1 
  [1] => www-data 3672 0.0 0.0 11396 1088 ? S 07:38 0:00 grep bot1.js 
  [2] => www-data 3673 0.0 0.0 4592 744 ? S 07:38 0:00 sh -c ps -aux | grep bot2.js 2>&1 
  [3] => www-data 3675 0.0 0.0 11396 972 ? S 07:38 0:00 grep bot2.js 
) 
Array ( 
  [0] => www-data 3670 0.0 0.0 4592 936 ? S 07:38 0:00 sh -c ps -aux | grep bot1.js 2>&1 
  [1] => www-data 3672 0.0 0.0 11396 1088 ? S 07:38 0:00 grep bot1.js 
  [2] => www-data 3673 0.0 0.0 4592 744 ? S 07:38 0:00 sh -c ps -aux | grep bot2.js 2>&1 
  [3] => www-data 3675 0.0 0.0 11396 972 ? S 07:38 0:00 grep bot2.js 
  [4] => www-data 3676 0.0 0.0 4592 808 ? S 07:38 0:00 sh -c ps -aux | grep bot3.js 2>&1 
  [5] => www-data 3678 0.0 0.0 11396 1068 ? S 07:38 0:00 grep bot3.js 
)

新编辑和信息。一直试图添加建议,但没有运气。 只是用模式测试等。如果我这样做,我会得到结果。

&#13;
&#13;
      
$pattern = '/(\\/usr\\/bin\\/node\\s\\/home\\/james\\/bot-accounts\\/Testing\\/botname\\/bot1.js)/i';
$subject = '/usr/bin/node /home/james/bot-accounts/Testing/botname/bot1.js ';
$result = preg_match( $pattern, $subject , $matches );
echo $result;
print_r($matches);
&#13;
&#13;
&#13;

但如果我将$ subject更改为$ output,我就没有结果。它的&#39; NULL&#39;

&#13;
&#13;
exec("ps aux | grep $pro[0] | awk {'print $11, $12'}", $output);
       
$pattern = '/(\\/usr\\/bin\\/node\\s\\/home\\/james\\/bot-accounts\\/Testing\\/botname\\/bot1.js)/i';

$result = preg_match( $pattern, $output , $matches );
echo $result;
print_r($matches);
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

  

每个进程都会列在ps aux的输出中;无论跑步,   睡觉,僵尸或停止。

但是,在你的情况下,由于你正在检查JS文件,我猜你用了什么来运行那个JS,对吗?

你应该注意到这个过程将是&#34;运行&#34;当ps aux的输出将其STAT作为R

价:https://askubuntu.com/a/473891

如果您可以提供关于该过程如何开始的线索,即bot1.js和其他人如何开始,或者如何运行这些过程,那么确定精确命令可能会有所帮助

答案 1 :(得分:1)

正如您所看到的,仅仅计算ps -aux的结果并不是检查运行的最佳方式。

使用preg_match模式#\d*\s\d*\s\?\s(\w).*?<here name of file>#is检查结果。 如果其中一个结果为R(即正在运行),则通过运行检查。

答案 2 :(得分:0)

正如您在var_dump看到的那样,exec始终将每次调用的输出添加到$output,但不会替换它。因此,在$output =[]命令之前添加exec