控制器动作作为cron job phalcon

时间:2017-02-09 22:13:11

标签: php cron phalcon

我需要运行一个cron作业来执行sql查询并每24小时将数据保存在数据库中。

我有一个名为GetproductsController.php的控制器,我必须执行的方法是indexAction()

我试过这样做:

  

5,10,15,20,25,30,35,40,45,50,55,59 * * * * / usr / bin / curl --silent http://localhost:8080/myproject/getproducts/index

但我不知道怎么做,如果有人知道我怎么做,我会很感激。

方面!

2 个答案:

答案 0 :(得分:1)

看起来你不想做什么(从cron调用控制器方法)。就个人而言,我会尝试使用他们的文档中的Phalcon CLI:https://docs.phalconphp.com/en/latest/reference/cli.html

curl是另一种选择。为此,首先使用以下命令确定服务器上卷曲的位置:

which curl

此命令的结果将是文件系统上的路径,例如/ usr / bin / curl。在下面的cron命令中使用该结果代替[path of curl]。

你会这样做:

59 23 * * * [path to curl] --silent https://mypage/getproducts/index &>/dev/null

答案 1 :(得分:1)

您需要为项目创建cli引导程序。

  • Web应用程序的默认应用程序类为\Phalcon\Mvc\Application。相反,您应该将\Phalcon\Cli\Console用于cli应用程序。
  • Web应用程序的默认DI类为\Phalcon\Di\FactoryDefault。相反,您应该将\Phalcon\Di\FactoryDefault\Cli用于cli应用程序。
  • Web应用程序的默认Dispatcher类为Phalcon\Mvc\Dispatcher。相反,您应该将Phalcon\Cli\Dispatcher用于cli应用程序。
  • Web应用程序的默认路由器类为Phalcon\Mvc\Router。相反,您应该将Phalcon\Cli\Router用于cli应用程序。

请注意,我提到的课程适用于Phalcon 2.0。我不确定Phalcon 3是否相同。

以下是documentation for cli applications in phalcon.

您可以使用相同的配置文件和一些if语句。例如:

if (php_sapi_name() == "cli") {
    $di = new Phalcon\Di\FactoryDefault\Cli();
} else {
    $di = new Phalcon\Di\FactoryDefault();
}

if (php_sapi_name() === "cli") {
    $di->set('dispatcher', function() {
        $dispatcher = new Phalcon\CLI\Dispatcher();
        $dispatcher->setDefaultNamespace('Project\\Tasks');
        return $dispatcher;
    });
} else {
    $di->set('dispatcher', function() {
        $dispatcher = new Phalcon\Mvc\Dispatcher();
        $dispatcher->setDefaultNamespace('Project\\Controllers');
        return $dispatcher;
    });
}

您可以将控制器类与cli路由一起使用。但我建议使用独立任务。

创建cli bootstrap文件后(让我们称之为cli.php)你可以为php #!/usr/bin/env php添加shebang并使该文件可执行。然后,您可以将任务作为cli.php {taskname}

运行