我试图显示某些进程是否在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;
问题是这些进程都没有运行。它检查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
)
新编辑和信息。一直试图添加建议,但没有运气。 只是用模式测试等。如果我这样做,我会得到结果。
$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;
但如果我将$ subject更改为$ output,我就没有结果。它的&#39; NULL&#39;
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;
答案 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
。