g4/tasker

应用异步任务管理器和执行器,类似于cron的PHP实现,具有以秒为分辨率的执行任务的能力

2.20.0 2024-03-06 13:45 UTC

README

Tasker - 应用异步任务管理器,类似于cron的PHP实现,具有以秒为分辨率的执行任务的能力(与cron以分钟为分辨率不同)

需求

  • MySQL表
CREATE TABLE tasks (
    task_id       BIGINT(20)   UNSIGNED          AUTO_INCREMENT,
    recu_id       INT(10)      UNSIGNED NOT NULL DEFAULT 0,
    identifier    VARCHAR(255)          NOT NULL DEFAULT '',
    task          VARCHAR(255)          NOT NULL DEFAULT '',
    data          TEXT,
    request_uuid  CHAR(36)              NOT NULL DEFAULT '',
    status        TINYINT(3)   UNSIGNED NOT NULL DEFAULT 0,
    priority      TINYINT(3)   UNSIGNED NOT NULL DEFAULT 0,
    ts_created    INT(10)      UNSIGNED NOT NULL DEFAULT 0,
    ts_started    INT(10)      UNSIGNED NOT NULL DEFAULT 0,
    exec_time     FLOAT(10,6)  UNSIGNED NOT NULL DEFAULT 0.000000,
    started_count TINYINT(3)   UNSIGNED NOT NULL DEFAULT 0,
    PRIMARY KEY (task_id),
    KEY (recu_id),
    KEY (priority),
    KEY (status),
    KEY pending (status, ts_created),
    KEY started_count (started_count)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE tasks_recurrings (
    recu_id   INT(10)      UNSIGNED          AUTO_INCREMENT,
    frequency VARCHAR(255)          NOT NULL DEFAULT '',
    task      VARCHAR(255)          NOT NULL DEFAULT '',
    data      TEXT,
    status    TINYINT(3)   UNSIGNED NOT NULL DEFAULT 0,
    priority  TINYINT(3)   UNSIGNED NOT NULL DEFAULT 0,
    PRIMARY KEY (recu_id),
    UNIQUE (task),
    KEY (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE tasks_error_log (
    tel_id       INT(10)      UNSIGNED          AUTO_INCREMENT,
    task_id      BIGINT(20)   UNSIGNED NOT NULL DEFAULT 0,
    identifier   VARCHAR(255)          NOT NULL DEFAULT '',
    task         VARCHAR(255)          NOT NULL DEFAULT '',
    data         TEXT,
    ts_started   INT(10)      UNSIGNED NOT NULL DEFAULT 0,
    date_started DATETIME                      DEFAULT NULL,
    exec_time    FLOAT(10,6)  UNSIGNED NOT NULL DEFAULT 0.00,
    log          TEXT,
    PRIMARY KEY (tel_id),
    KEY (task_id),
    KEY (identifier),
    KEY (task),
    KEY (ts_started),
    KEY (date_started),
    KEY (exec_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tasker_pool` (
   `hostname` varchar(255) NOT NULL DEFAULT '',
   `status` tinyint(3) unsigned NOT NULL DEFAULT '0',
   `ts_available` int(10) NOT NULL DEFAULT '0',
    PRIMARY KEY (`hostname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 示例数据
INSERT INTO tasks_recurrings
    (task, frequency, data, status)
VALUES
    ('Dummy\\Task\\Foo', '0 3-59/15 2,6-12 */15 1 2-5', '{\"foo\":123}', '1'),
    ('Dummy\\Task\\Bar', '0 */5 * * * *',               '{\"bar\":234}', '1'); # runs every 5 minutes

许可证

(MIT许可证)详细信息请参阅LICENSE文件...