检查php连接状态


Check php connection status

我有一个脚本,其中回声一些内容,并关闭连接到客户端,但它将后台工作,以处理一些电子邮件。

是否有可能跟踪后台进程的状态?我的意思是它已经完成了,或者还在运行等等。

当前,我正在DB上设置进程启动和进程结束的标志。但我担心有时脚本可能会在某些情况下失败。

交货。从服务器主机强制终止。

也有任何可能的方法来触发一个函数时,脚本停止执行(通过退出,强制停止等…)

我在windows/linux服务器上运行脚本,两者都是共享主机,没有CRON,任务调度程序支持。

谢谢。

在linux服务器中,您可以通过以下代码检查脚本状态

$output = array();
exec("ps aux | grep -i YOUR_SCRIPT | grep -v grep", $output);
if (empty($output)) {
    // your script is not running
    doSomething();
}

我没有测试windows部分,所以它可能有一点bug。但我认为概念是相似的。

$name = 'YOUR_SCRIPT';
if (!isRunning($name)) {
    // script is not running
    doSomething();
}
function isRunning($scriptname)
{
    $output = array();
    if (strtoupper(substr(php_uname(), 0, 3)) === 'WIN') {
        // Windows os
        exec("tasklist | find '"{$scriptname}'"", $output);
    } else {
        // Not window os, maybe linux, freebsd..etc
        exec("ps aux | grep -i $scriptname | grep -v grep", $output);
    }
    return !empty($output);
}

我不完全确定我在这里是否得到了正确的结束,但我已经假设你想记录你的后台进程的活动,而不是实际连接到它。

如果是这样,也许最简单的方法是让进程创建一个txt日志文件,您可以在需要时访问该文件以查看发生了什么。只需根据需要使用fwrite()来附加文件。

您也可以使用mysql数据库表来达到同样的目的,它具有更易于阅读的优点。

如果你需要主动警告,如果没有(或特殊的)发生,你可以使用你的头文件或连接函数来检查你每次用户加载一个页面。如果你有足够的点击量,你会收到一封电子邮件pdq。

你确定你没有头发吗?检查cpanel -它可能隐藏在那里。

以上答案是正确的。之后如果你想停止进程你可以通过

来杀死进程
kill -9 PID

您将在输出数组中获得PID。在if语句中使用它。

$output = array();
exec("ps aux | grep -i YOUR_SCRIPT | grep -v grep", $output);
 if (empty($output)) {
   $kill = " kill -9 ".$output['PID'] // Print the output array to get exact index for PID
    exec($kill); 
  }