【问题标题】:Controller action as a cron job phalcon作为 cron 作业 phalcon 的控制器操作
【发布时间】:2017-02-13 15:23:33
【问题描述】:

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

我有一个名为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

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

注意!

【问题讨论】:

  • cd 是更改目录,它至少应该以php开头
  • 你能举个例子吗? @nogad
  • stackoverflow.com/questions/2689284/executing-php-with-crontab我的php路径一直是/usr/bin/php。这个问题的公认答案告诉你如何找到你的答案。我不确定如何调用函数思想。
  • 在我的情况下路径很好,但我不知道如何执行方法 indexAction() @tjfo
  • 为什么不创建一个运行控制器和操作的页面,然后通过 cron 运行 curl http://pathtoyoursite.com/thefile.php?也总是一个选择;-P

标签: php cron phalcon


【解决方案1】:

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

  • Web 应用程序的默认应用程序类是\Phalcon\Mvc\Application。相反,您应该将 \Phalcon\Cli\Console 用于 cli 应用程序。
  • Web 应用程序的默认 DI 类是 \Phalcon\Di\FactoryDefault。相反,您应该将 \Phalcon\Di\FactoryDefault\Cli 用于 cli 应用程序。
  • Web 应用程序的默认调度程序类是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 引导文件(我们称之为 cli.php)后,您可以为 php 添加 shebang #!/usr/bin/env php 并使该文件可执行。然后您可以以cli.php {taskname} 身份运行您的任务

【讨论】:

    【解决方案2】:

    您想要做的似乎不太可能(从 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
    

    【讨论】:

    • 我试过你的答案,但它不起作用!我更新我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多