[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 中

定时任务设置完成。

posted @ 2025-05-26 01:09  dalifornia-cream  阅读(9)  评论(0)    收藏  举报