监控网站的后台流程

时间:2013-01-22 15:31:45

标签: php mysql process-monitoring

我有一个人们可以请求处理某些文件的网站,处理在我的服务器上完成,然后处理的文件可供下载。我想让我的网站管理员从网站上看到处理代码是否正在运行,失败,等待等等。

所以我想我只想在网页上写一行“Waiting”,“Active”,“Failed”等等。我希望它会使用php。

这是大纲,特别是这是我的系统的工作方式:

•当用户选择处理作业时,使用php将其添加到mysql数据库中。

•名为monitor_database.py的python代码在屏幕实例中运行,它监视数据库并在注意到数据库中有新请求时启动相应的处理作业。

•处理完成后,数据库将更新。

所以我希望能够从我的网页上看到屏幕会话和我的monitor_database.py是否正在运行,以及monitor_database.py是否已发送任何要处理或正在等待的内容。

有没有人建议如何最好地实现这一目标?

3 个答案:

答案 0 :(得分:0)

如果你没有采用IE,你可以使用WebSockets。

这个答案与你的问题一样通用; - )

答案 1 :(得分:0)

最常见的方法是使用Ajax调用。例如,查看有多少旅游网站在搜索航班时显示状态屏幕。

您执行此操作的确切方式在很大程度上取决于应用程序,但原则上您有一个“状态”页面(可能是用户上传文件的页面)。状态页面包含JavaScript,每隔30秒调用服务器上的PHP脚本; PHP脚本依次查询数据库以查找当前文件的状态,并返回一些XML或JSON。您网页上的JavaScript会解释该XML或JSON,并使用结果更新页面。还有更多描述here。有示例代码here

答案 2 :(得分:0)

这是我最终选择的解决方案......

首先,我在我的数据库上创建了一个新的mysql表,它只包含一行,描述了我的代码的状态(等待,执行此操作,执行此操作等)。

现在我的页面上有这个PHP代码:

exec( "ps aux | grep process_name.py | grep -v grep | grep -v emacs", $pids );
// This looks for any processes named 'process_name.py', ignoring those caused by emacs,
// and the one caused by grep itself.
$r_process = @mysqli_query($database, "SELECT status FROM process_status WHERE status_id=1");
// This checks the status of the file in the database.
$Monitor = mysqli_fetch_array($r_process);
$StatusName = $Monitor['status'];
if ( empty($pids) )
    {
    $Status = 'Failed';
    }
else
    {
    $Status = 'Operating';
    }

现在,在我的html中,我可以看到“在process1上失败”或“在process2上运行”的内容,具体取决于我的进程如何进行。我必须刷新我的页面才能让它改变。我相信先前的答案假设我想避免刷新页面并建议避免这种情况的方法,但实际上我只是想要一种简单的方法来检查进程是否正在运行。 exec ( gps... )是关键。