简短的背景:
我的数据库将有一个电子邮件列表,用户将创建价格表以发送到这些客户的电子邮件。我希望通过单击按钮来确保价格表在发送前正确无误,而不是设置 CRON 作业来为我处理此问题。
过程
我正在使用 Codeigniter 和远程主机上的 Linux 服务器。
- 用户单击按钮以启动该过程。将 db 列状态设置为我在模型中获得的 PID。
- AJAX 调用控制器函数。这会一直运行,直到它完成向客户发送电子邮件。(暂时的虚拟睡眠功能)。
当脚本完成(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 脚本,并且需要一种方法,当我访问不同的页面或刷新当前页面时,我可以检查脚本是否仍在运行以获得正确的用户反馈。