繁体   English   中英

控制器动作作为Cron Job Phalcon

[英]Controller action as a cron job 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

但是我不知道该怎么做,如果有人知道我该怎么做,我将不胜感激。

看待!

看来您想做的事情是不可能的(从cron调用控制器方法)。 就个人而言,我会尝试从其文档中使用Phalcon CLI: https : //docs.phalconphp.com/en/latest/reference/cli.html

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

which curl

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

你会做:

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

您需要为您的项目创建一个cli bootstrap。

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

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

这是phalcon中cli应用程序文档。

您可以使用带有几个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)后,您可以为shep添加php #!/usr/bin/env php并使该文件可执行。 然后,您可以以cli.php {taskname}身份运行任务

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM