我需要运行一个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
但我不知道怎么做,如果有人知道我怎么做,我会很感激。
方面!
答案 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引导程序。
\Phalcon\Mvc\Application
。相反,您应该将\Phalcon\Cli\Console
用于cli应用程序。\Phalcon\Di\FactoryDefault
。相反,您应该将\Phalcon\Di\FactoryDefault\Cli
用于cli应用程序。 Phalcon\Mvc\Dispatcher
。相反,您应该将Phalcon\Cli\Dispatcher
用于cli应用程序。 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}