作为 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}
我需要 运行 一个 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}