0

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

所以我想我只想在网页上有一行写着“等待”、“活动”、“失败”等。我希望它会使用 php。

这是大致的大纲,特别是我的系统是这样工作的:

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

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

• 一旦处理完成,数据库就会更新。

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

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

4

3 回答 3

0

如果您不采用 IE,则可以使用 WebSockets。

这个答案和你的问题一样笼统;-)

于 2013-01-22T15:36:53.203 回答
0

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

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

于 2013-01-24T11:26:31.130 回答
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... )是关键。

于 2013-05-15T16:28:05.493 回答