检查运行php脚本的状态

时间:2013-08-23 14:38:40

标签: php javascript codeigniter

简短背景:

我的数据库将包含电子邮件列表,用户将创建价格表以发送给这些客户的电子邮件。我希望在点击按钮时确保价格表在发送之前是正确的,而不是设置CRON作业来处理这个问题。

过程

我正在使用Codeigniter和远程主机上的Linux服务器。

  1. 用户单击按钮以启动该过程。将db列状态设置为我在模型中获得的PID。
  2. AJAX调用控制器功能。这一直持续到通过电子邮件发送客户为止。 (现在是假睡眠功能)。
  3. 当脚本完成(满足HTTP请求)时,ajax会删除处理图标。

    • 如果用户在脚本启动后访问该页面,如果status!= 0,则循环到HTTP请求控制器检查PID的状态。
    • 我注意到我得到的PID总是5012,而且我的脚本似乎总是在运行。
    • 我正在运行if (shell_exec("ps aux | grep " . $pid . " | wc -l") > 0) { // PID is running }检查进程是否正在运行,其中$ pid是函数的参数。
  4. 使这一切结合在一起的最后步骤:

    • 如果用户访问该页面且脚本正在运行,我无法查看脚本是否以及何时完成
    • 我不想粗暴地查询数据库,因为这似乎是以后的性能问题
    • 我最终想在网站上添加静态图标,以便用户无需返回此处查看状态

    TLDR

    我在codeigniter中运行PHP脚本,并且需要一种方法,当我访问其他页面或刷新当前页面时,我可以检查脚本是否仍在运行,以获得正确的用户反馈。

1 个答案:

答案 0 :(得分:2)

您希望避免因性能而使用数据库,但在某些地方您需要标记或其他方式来标识脚本正在运行。 PHP会话已经结束,因为从另一个会话中查看它的人不会设置相同的标志。

尝试使用比DB更快的东西 - 比如memcache。

<?php
// if memcache->is_running is set
    // echo some response message saying it's running and exit
// set memcache->is_running w/ the start time maybe
// ... your code
// write memcache->is_running start timestamp and end timestamp to db or file
// clear memcache->is_running