array_shift($argv); // 取出 appName ,命令行的第一个参数 $appName = array_shift($argv); /* |-------------------------------------------------------------------------- | 初始化 engine |-------------------------------------------------------------------------- | | 第一个参数为 APP 的根目录 | 第二个参数为 APP 的名称,用于定位配置文件,配置文件放置在 /config/ 目录, | 配置文件命名规则为 modules.{appName}.php | 第三个参数为 APP 的运行模式,支持 web 和 cli,默认是 web , 命令行模式下使用 cli | | */ $engine = new \Eva\EvaEngine\Engine(__DIR__ . '/', $appName ? $appName : 'evaengine', 'cli'); $engine->loadModules(include __DIR__ . '/config/modules.' . $engine->getAppName() . '.php')->bootstrap(); /** @var $output Eva\EvaEngine\CLI\Output\ConsoleOutput */ $output = $engine->getDI()->getOutput(); try { /** @var $dispatcher Phalcon\CLI\Dispatcher */ $dispatcher = $engine->getDI()->getDispatcher(); $engine->getApplication()->handle(array('module' => $dispatcher->getModuleName(), 'task' => $dispatcher->getTaskName(), 'action' => $dispatcher->getActionName(), 'params' => $dispatcher->getParams())); } catch (\Phalcon\Exception $e) { $output->writeln('<error> [ERROR]:' . $e->getMessage() . ' </error>'); $output->writeln(''); $output->writeln('<comment>' . $e->getTraceAsString() . '</comment>'); exit(255); } // 输出内存使用情况, $output->writelnInfo(sprintf("\n" . 'Memory usage: %sMB (peak: %sMB), time cost: %ss', memory_get_usage(true) / 1024 / 1024, memory_get_peak_usage(true) / 1024 / 1024, microtime(true) - $_start_time));
#!/usr/bin/env php <?php //Send email by Gearman queue require __DIR__ . '/../init_autoloader.php'; $appName = isset($argv[1]) ? $argv[1] : null; $engine = new \Eva\EvaEngine\Engine(__DIR__ . '/..'); if ($appName) { $engine->setAppName($appName); } $engine->loadModules(include __DIR__ . '/../config/modules.' . $engine->getAppName() . '.php')->bootstrap(); $worker = $engine->getDI()->getWorker(); $worker->addFunction('sendmailAsync', 'sendmailAsync'); $logger = new Phalcon\Logger\Adapter\File($engine->getDI()->getConfig()->logger->path . 'worker_sendmail.log'); $logger->info(sprintf("Sendmail worker started by appname %s", $engine->getAppName())); //MySQL interactive_timeout after 8 hours function refreshDbConnect() { global $engine; $di = $engine->getDI(); $di->getDbMaster()->connect(); $di->getDbSlave()->connect(); } function sendmailAsync($job) { global $engine; global $logger; $jobString = $job->workload(); $logger->info(sprintf("Start sending mail by %s", $jobString)); echo sprintf("Start sending mail by %s \n", $jobString); try { $work = json_decode($jobString, true);