检查php连接状态

时间:2013-06-08 05:26:37

标签: php lamp

我有一个脚本可以回显一些内容并关闭与客户端的连接,但是它会在后台处理一些电子邮件。

有没有办法跟踪后台进程的状态?我的意思是它已完成,或仍在运行等。

目前我在进程启动和进程结束时在DB上设置了一个标志。但我担心有时候脚本可能会在某些情况下失败。

EX。从服务器主机强制终止。

还有任何可能的方法在脚本停止执行时触发一个函数(通过exit,强制停止等等。)

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

谢谢。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

我没有测试Windows部件,所以它可能是一个小马车。 但我认为这个概念是相似的。

$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);
}

答案 2 :(得分:0)

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

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

您也可以将mysql数据库表用于相同的目的,这样可以更容易阅读。

如果您在发生任何事情(或某些特定事件)时需要主动发出警告,您可以使用头文件或连接功能在用户每次加载页面时检查您。如果您有足够的点击量,您将收到一封电子邮件pdq。

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

答案 3 :(得分:0)

上面的答案是对的。之后,如果您想要停止该过程,您可以通过

来终止该过程
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); 
  }