作为 cron 作业 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 是另一种选择。为此,首先确定 curl 在您的服务器上的位置:

which curl

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

你会做:

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

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

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

请注意,我提到的 classes 是针对 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;
    });
}

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

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