[fusio] 定时任务实战
Fusio内建了一套配置和执行定时任务的机制。由于相关文档过于简略,实际配置的难度较大。本文提供一个成功配置的示例,希望对读者有帮助。
说明:本示例的执行内容,采用内建 Class 的方式。这需要针对 fusio-impl 包进行代码修改、升级和部署,配置 crontab 和 fusio。其中,包的升级和部署不是本文内容。代码修改和若干配置,分为以下几个步骤:
一、编写定时任务的程序逻辑
定时任务的程序,需要实现 ActionInterface 接口,示例代码如下:
namespace Fusio\Impl\Callable\Log;
use Fusio\Engine\ActionInterface;
class CleanupLog implements ActionInterface
{
public function handle(RequestInterface $request, ParametersInterface $configuration, ContextInterface $context): mixed
{
// ...
return [
'success' => true,
'message' => '',
];
}
}
二、注册到 ServiceLocator
将 src/Callable 路径下的全部 ActionInterface 的实现,注册到 ServiceLocator。编辑文件 fusio-impl/resources/container.php,添加如下内容:
$services->load('Fusio\\Impl\\Callable\\', __DIR__ . '/../src/Callable')->public();
三、定时轮询 fusio cronjob
设置 fusio cronjob 为每分钟轮询一次。操作 shell:
crontab -e
添加定时任务:
* * * * * /path/to/fusio/bin/fusio cronjob > /path/to/log/cron.log 2>&1
四、把程序逻辑添加到 fusio cronjob 中
定时任务设置完成。