【发布时间】:2015-11-17 07:40:07
【问题描述】:
前段时间,我正在寻找一种方法来在用户中止时保持 PHP 脚本运行。 (当用户关闭它的浏览器时)。即使用户决定离开,我也需要它来完成一些长查询。
ignore_user_abort(1);
set_time_limit(0);
while (true) {
// Do queries
}
我将如何杀死上面的脚本?
更新
有人向我建议了getmypid() 函数。我现在实现了以下内容:
ignore_user_abort(1);
set_time_limit(0);
// Get process id
$pid = getmypid();
$stmt = "INSERT INTO processes (pid, started) VALUES ('".$pid."', NOW())";
while (true) {
// Do Queries
if ($query) {
break;
}
}
$stmt = "UPDATE processes SET ended=NOW() WHERE pid='".$pid."'";
我现在可以查询数据库以查看尚未完成的 hwat 进程。我会知道这些进程被卡住了。
【问题讨论】:
-
1.通过杀死执行该脚本的进程,以及 2. 对于需要较长时间处理的东西,您应该改用排队系统。
-
当你想杀死这个脚本时是什么事件?
-
@arkascha 你能详细说明你的评论吗?
-
@AkshatSinghal 它运行一些查询然后完成。但有时我感觉它只是一直挂起,我的服务器变慢了。所以,我希望能够管理以某种方式继续运行的脚本。知道他们跑了多长时间并杀死他们。
-
在 DB/ 文件中保留运行脚本的日志(脚本启动时添加进程 ID),脚本结束时删除该条目。这样你就会知道正在运行的脚本,然后可以使用 sudo kill {pid} 杀死
标签: php