Crontab 的规则和linux的crontab一致吗?

小七他哥

问题描述

我定义了一个 crontab,规则是每分钟执行一次,具体代码如下:

<?php

use Workerman\Worker;
use Workerman\Crontab\Crontab;

$worker = new Worker();
$worker->name = PROJECT . 'Crontab';

// 设置时区,避免运行结果与预期不一致
date_default_timezone_set('PRC');

$worker->onWorkerStart = function () {
    global $db;
    $db = MySQL::getInstance($GLOBALS['db_project_config']);
    new Crontab('*/1 * * * *', function () use ($db) {
        WsService::checkProjectUrlStatusTask($db);
    });
};

实际执行结果如下:

Press Ctrl+C to stop. Start success.
共有28条数据,共1页,开始处理时间:2024-10-24 20:40:00
处理结束时间:2024-10-24 20:40:30,耗时 30 秒
共有28条数据,共1页,开始处理时间:2024-10-24 20:41:30
处理结束时间:2024-10-24 20:41:53,耗时 23 秒
共有28条数据,共1页,开始处理时间:2024-10-24 20:42:23
共有28条数据,共1页,开始处理时间:2024-10-24 20:43:00
处理结束时间:2024-10-24 20:44:02,耗时 62 秒
共有28条数据,共1页,开始处理时间:2024-10-24 20:45:02
处理结束时间:2024-10-24 20:46:09,耗时 67 秒
^CWorkerman[start.php] stopping ...

他好像不是每分钟执行一次,而是向后延续一样,感觉和 linux 的 crontab 好像不一样,如果不一样,麻烦作者大佬在文档( https://www.workerman.net/doc/workerman/components/crontab.html )里说明下,不然容易引起误解,我还自己加了防止同时重复执行的逻辑,测了半天发现根本不用加。谢谢大佬。

我用的 crontab 版本是 1.0.6

176 1 1
1个回答

walkor 打赏

和定时器规则一样,都是在当前进程运行,如果运行的任务时间很长超过下个定时,则延后

  • 暂无评论
×
🔝