检查运行php脚本的状态


Check status of running php script

简短背景:

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

流程

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

  1. 用户单击一个按钮以启动该过程。将数据库列状态设置为我在模型中得到的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是函数的参数

使这一切结合在一起的最后步骤:

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

TLDR

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

由于性能原因,您希望避免使用数据库,但在某些地方您需要一个标志或其他方式来标识脚本正在运行。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