SQLSTATE [HY000] [2002]没有这样的文件或目录 - PHP守护进程

时间:2017-09-22 18:53:10

标签: php mysql bash pdo

我制作了一个PHP守护程序启动程序(我通过exec()执行一个独立的[这是一个传递给守护程序的参数]脚本),这个PHP守护程序运行的脚本使用了我制作的PDO wrapper同样。

问题是,当我通过PHP守护程序($ php)运行脚本时,我的PDO包装器无法连接并抛出SQLSTATE[HY000] [2002] No such file or directory

daemon_script.php #!/usr/bin/php开标记之前包含<?php

现在,我从昨天开始一直在这里搜索并发现了一些方法,但没有一个是我的具体案例,并且无法使其成功,所以我认为你有一个想法关于我做错了什么。

提前致谢。

  

使用:

     
      
  • PHP 7.0.21(虽然打算用PHP 5实现)
  •   
  • MYSQL Ver 14.14 Distrib 5.6.34,for osx10.12(x86_64)
  •   

守护程序 start() 方法:

/**
 * Starts the script.
 * Also receives a script and sets it, then it runs it.
 *
 * @param  string $script Optional script to start.
 * @throws Exception      Could not init.
 * @throws Exception      Could not save pid.
 * @return boolean
 */
public function start($script = '')
{
    if ($script)
    {
        $this->setScript($script);
    }

    $initialized    = false;
    $daemon_command = 'php '.$this->script.' > script.log 2>&1 & echo $! &';

    try
    {
        $daemon_pid = exec($daemon_command, $output);

        if (!$daemon_pid)
        {
            throw new Exception('Could not initialize. Invalid script: '.$this->script);
        }
        if (!file_put_contents($this->pid, $daemon_pid))
        {
            exec('kill '.$daemon_pid);
            throw new Exception('Could not save process id "'.$daemon_pid.'"… killing it.');
        }

        usleep(50000);
        if (!($initialized = $this->checkPID($daemon_pid)))
        {
            file_put_contents($this->pid, null);
            throw new Exception('Script died unexpectedly!');
        }
    }
    catch (Exception $e)
    {
        $this->errors = array(
            'code' => $e->getCode(),
            'message' => $e->getMessage()
        ) + $this->_errors;
    }

    return $initialized;
}

1 个答案:

答案 0 :(得分:1)

您需要在命令中设置PHP的完整路径,以便exec()能够正确找到它。由于php位于/opt/local/bin/php,因此只需将其添加为:

$daemon_command = '/opt/local/bin/php '.$this->script.' > script.log 2>&1 & echo $! &';

作为注释,cron通常以相同的方式工作,因为它不会访问命令行用户所执行的相同PATH变量。