# http-crontab **Repository Path**: hbh112233abc/http-crontab ## Basic Information - **Project Name**: http-crontab - **Description**: 接口化秒级定时任务管理扩展包 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-27 - **Last Updated**: 2026-04-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ThinkCrontab接口化秒级定时任务 ## 概述 **项目来源**: [HttpCrontab](https://github.com/cshaptx4869/http-crontab) 基于 **Workerman** + **Sqlite** 的接口化秒级定时任务管理,兼容 Windows 和 Linux 系统。 > 主要改造点: - 加入Service配置 - 数据库使用独立的Sqlite数据库 - 安装扩展自动加入配置文件crontab - 仅作为ThinkPHP>=8的扩展 ## 定时器格式说明 ``` 0 1 2 3 4 5 | | | | | | | | | | | +------ day of week (0 - 6) (Sunday=0) | | | | +------ month (1 - 12) | | | +-------- day of month (1 - 31) | | +---------- hour (0 - 23) | +------------ min (0 - 59) +-------------- sec (0-59)[可省略,如果没有0位,则最小时间粒度是分钟] ``` ## 使用 ### 启动服务 ```shell php think crontab start ``` ### 访问管理页面 在配置文件中设置 `enable_http => true` 后,启动服务后即可通过浏览器访问配置的 `base_uri` 地址打开前端管理页面。例如: - 默认配置: `http://127.0.0.1:2345` - 自定义配置: `http://0.0.0.0:8080` **注意**: 如需禁用 HTTP 服务和前端管理页面,设置 `enable_http => false` 即可,服务将仅运行定时任务。 ## 帮助 ```bash $ php think crontab -h Usage: crontab [options] [--] Arguments: action start|stop|restart|reload|status|connections Options: -d, --daemon Run the http crontab server in daemon mode. --name[=NAME] Crontab name [default: "Crontab Server"] --debug Print log -h, --help Display this help message -V, --version Display this console version -q, --quiet Do not output any message --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug ``` ## 配置 ### 数据库支持 本项目支持多种数据库类型,可根据项目需求选择合适的数据库: | 数据库类型 | 说明 | 推荐场景 | | ---------- | ------------------------------ | ------------------------ | | sqlite | 轻量级文件数据库,无需额外安装 | 开发环境、小型项目 | | mysql | 开源关系数据库 | 生产环境、中小型项目 | | pgsql | PostgreSQL 开源关系数据库 | 生产环境、高并发项目 | | dm | 达梦数据库 | 国产化适配、政府企业项目 | | gauss | 高斯数据库 | 国产化适配、企业级项目 | | opengauss | openGauss 开源关系数据库 | 国产化适配、开源项目 | **注意**: 不同数据库的 SQL 语法略有差异,系统会根据配置的 `database.type` 自动加载对应的建表 SQL。 配置文件位于 `config/crontab.php`,默认配置如下: ```php 'Http Crontab Server', // worker进程运行用户 'user' => 'root', // debug模式 'debug' => false, // socket 上下文选项 'context' => [], // 请求地址 'base_uri' => env('cron.crontab_base_uri', 'http://127.0.0.1:2345'), // 安全秘钥 'safe_key' => env('cron.crontab_safe_key', 'Q85gb1ncuWDsZTVoAEvymrNHhaRtp73M'), // 日志保留期限(天), 0 表示不自动清理 'log_retention_days' => env('crontab.log_retention_days', 30), // 数据库配置(可选的,为空默认使用database.default) // 'database' => [ // // 数据库类型 // 'type' => 'sqlite', // // 数据库名 // 'database' => __DIR__ . '/crontab.db', // // 数据库编码默认采用utf8mb4 // 'charset' => 'utf8', // // 数据库表前缀 // 'prefix' => '', // // 监听SQL // 'trigger_sql' => env('app_debug', false), // // 开启字段缓存 // 'fields_cache' => true, // ], // 建表sql配置(可选的) // 'sql' => [ // 'create_task' => 'task表创建sql', // 'create_task_log' => 'task_log表创建sql', // 'create_task_lock' => 'task_lock表创建sql', // 'drop_table' => '删除表sql', // ], ]; ``` ### 配置项说明 #### 基础配置 | 配置项 | 类型 | 默认值 | 说明 | | ----------- | ------ | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | name | string | 'Http Crontab Server' | 定时器服务名称 | | user | string | 'root' | Worker 进程运行用户(Linux 系统有效) | | debug | bool | false | 是否开启调试模式 | | enable_http | bool | `env('crontab.enable_http', false)` | 是否启用 HTTP 服务。true: 同时运行 Crontab 定时任务和 HTTP 接口服务;false: 仅运行 Crontab 定时任务,不提供 HTTP 接口。**启用后可访问前端管理页面** | | context | array | [] | Socket 上下文选项,支持 SSL 等配置 | | base_uri | string | `'http://127.0.0.1:2345'` | 服务监听地址。启用 HTTP 服务后,通过此地址访问管理页面 | | safe_key | string | 环境变量或默认值 | API 安全秘钥,用于接口访问验证 | #### 数据库配置 | 配置项 | 类型 | 默认值 | 说明 | | --------------------- | ------ | ------------------------- | ----------------------------------------------------------------------------------------- | | database.type | string | 'sqlite' | 数据库类型,支持:sqlite、mysql、pgsql、dm(达梦)、gauss(高斯)、opengauss(openGauss) | | database.database | string | `__DIR__ . '/crontab.db'` | SQLite 数据库文件路径(SQLite)或数据库名(其他数据库) | | database.charset | string | 'utf8' | 数据库字符集 | | database.prefix | string | '' | 数据库表前缀 | | database.trigger_sql | bool | `env('app_debug', false)` | 是否监听并输出 SQL 语句,用于调试 | | database.fields_cache | bool | true | 是否开启字段缓存,开启后可提升性能 | #### 日志清理配置 | 配置项 | 类型 | 默认值 | 说明 | | ------------------ | ---- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | | log_retention_days | int | `env('crontab.log_retention_days', 30)` | 日志保留期限(天),设置为 0 表示不自动清理过期日志。启用后会自动注册一个每天凌晨 2:00 执行的定时任务来清理过期日志。 | ### 配置示例 #### 1. 修改监听地址和端口 ```php return [ 'enable_http' => true, // 启用 HTTP 接口服务 'base_uri' => 'http://0.0.0.0:8080', // 监听所有网卡的8080端口,通过此地址访问管理页面 // ...其他配置 ]; ``` **访问管理页面**: 启用 HTTP 服务后,访问 `http://127.0.0.1:8080` 即可打开定时任务前端管理页面。 #### 2. 启用 HTTPS (SSL) ```php return [ 'enable_http' => true, // 启用 HTTP 接口服务 'base_uri' => 'https://0.0.0.0:8443', 'context' => [ 'ssl' => [ 'local_cert' => '/path/to/server.crt', 'local_pk' => '/path/to/server.key', 'verify_peer' => false, ], ], // ...其他配置 ]; ``` **访问管理页面**: 启用 HTTPS 后,访问 `https://0.0.0.0:8443` 即可打开定时任务前端管理页面。 #### 3. 使用环境变量配置安全秘钥和HTTP服务 在 `.env` 文件中添加: ```env # Crontab 配置 CRON_CRONTAB_BASE_URI=http://0.0.0.0:8080 CRON_CRONTAB_SAFE_KEY=your_custom_secret_key_here CRONTAB_ENABLE_HTTP=true # 启用 HTTP 接口服务 ``` 配置文件中: ```php return [ 'enable_http' => env('crontab.enable_http', false), // 使用环境变量 'base_uri' => env('cron.crontab_base_uri', 'http://127.0.0.1:2345'), 'safe_key' => env('cron.crontab_safe_key', ''), // ...其他配置 ]; ``` **访问管理页面**: 启用 HTTP 服务后,访问 `.env` 中配置的 `CRON_CRONTAB_BASE_URI` 地址即可打开定时任务前端管理页面。 **说明**: 设置 `enable_http => false` 时,仅运行定时任务,不提供 HTTP 接口和前端管理页面访问。 #### 4. 开发环境完整配置 ```php return [ 'name' => 'Dev Crontab Server', 'debug' => true, // 开启调试模式 'enable_http' => true, // 启用 HTTP 接口服务 'base_uri' => 'http://127.0.0.1:8080', 'safe_key' => 'dev_key_for_testing', 'database' => [ 'type' => 'sqlite', 'database' => __DIR__ . '/crontab.db', 'trigger_sql' => true, // 开启SQL监听 'fields_cache' => false, // 关闭字段缓存 ], ]; ``` **访问管理页面**: 启动服务后,访问 `http://127.0.0.1:8080` 即可打开前端管理页面进行定时任务管理。 #### 5. 生产环境优化配置 ##### 5.1 使用 SQLite(默认) ```php return [ 'name' => 'Production Crontab Server', 'user' => 'www-data', // 使用低权限用户运行 'debug' => false, 'enable_http' => env('crontab.enable_http', false), // 根据环境变量决定是否启用 HTTP 接口 'base_uri' => 'http://0.0.0.0:2345', 'safe_key' => env('cron.crontab_safe_key', ''), // 使用环境变量 'database' => [ 'type' => 'sqlite', 'database' => '/data/crontab/crontab.db', // 使用独立数据目录 'charset' => 'utf8', 'trigger_sql' => false, // 关闭SQL监听 'fields_cache' => true, // 开启字段缓存 ], 'log_retention_days' => env('crontab.log_retention_days', 30), // 保留30天日志 ]; ``` ##### 5.2 使用 MySQL ```php return [ 'name' => 'Production Crontab Server', 'user' => 'www-data', 'debug' => false, 'enable_http' => env('crontab.enable_http', false), 'base_uri' => 'http://0.0.0.0:2345', 'safe_key' => env('cron.crontab_safe_key', ''), 'database' => [ 'type' => 'mysql', 'hostname' => env('crontab.db_host', '127.0.0.1'), 'database' => env('crontab.db_name', 'crontab'), 'username' => env('crontab.db_user', 'root'), 'password' => env('crontab.db_pass', ''), 'hostport' => env('crontab.db_port', '3306'), 'charset' => 'utf8mb4', 'trigger_sql' => false, 'fields_cache' => true, ], 'log_retention_days' => env('crontab.log_retention_days', 30), ]; ``` **说明**: 生产环境可根据需要设置 `CRONTAB_ENABLE_HTTP=true` 启用管理页面,或设置为 `false` 仅运行定时任务。启用后访问 `http://0.0.0.0:2345` 即可打开管理页面。默认会保留最近 30 天的日志,并自动在每天凌晨 2:00 清理过期日志。 #### 7. 配置日志自动清理 通过配置 `log_retention_days` 参数控制日志保留期限: ```php return [ // ... 其他配置 // 保留 7 天的日志 'log_retention_days' => 7, // 或者使用环境变量 'log_retention_days' => env('crontab.log_retention_days', 7), ]; ``` 在 `.env` 文件中设置: ```env CRONTAB_LOG_RETENTION_DAYS=7 ``` **工作原理**: - 当 `log_retention_days > 0` 时,系统会在启动时自动注册一个定时任务 - 该任务在**每天凌晨 2:00** 执行 - 自动删除超过保留期限的日志表和日志记录 - 设置为 `0` 时禁用自动清理功能 ### 安全说明 1. **修改安全秘钥**:生产环境务必修改 `safe_key` 为强密码 2. **环境变量**:建议使用环境变量存储敏感信息 3. **HTTPS**:生产环境建议使用 HTTPS 加密传输 4. **防火墙**:限制对定时任务接口的访问权限 5. **运行用户**:使用低权限用户(如 `www-data`)而非 root 6. **HTTP 服务开关**:生产环境如果不需要管理接口,可设置 `enable_http => false` 禁用 HTTP 服务,仅运行定时任务 ### 注意事项 1. **数据库权限**:确保 PHP 进程对数据库文件所在目录有读写权限 2. **字段缓存**:生产环境建议开启 `fields_cache` 以提升性能 3. **SQL 监听**:`trigger_sql` 仅在开发调试时使用,生产环境建议关闭 4. **Worker 用户**:`user` 配置仅在 Linux 系统且当前用户为 root 时生效 5. **端口占用**:确保 `base_uri` 指定的端口未被其他程序占用 6. **时间粒度**:定时器开始、暂停、重启 都是在下一分钟开始执行 7. **HTTP 服务**:设置 `enable_http => true` 时才会启动 HTTP 接口服务;设置为 `false` 时仅运行定时任务,不提供接口管理功能 8. **日志自动清理**:配置 `log_retention_days` > 0 时,系统会在每天凌晨 2:00 自动清理过期日志;设置为 0 则禁用该功能。清理操作包括删除整个过期的月分表,以及删除表内过期的日志记录。 ## 数据库操作 `src/Db` 类提供了完整的定时任务数据库操作方法,支持任务、日志和锁的管理。 ### 初始化 ```php use bingher\crontab\Db; // 使用默认配置初始化 $db = new Db(); // 使用自定义配置初始化 $db = new Db([ 'database' => runtime_path() . 'crontab/crontab.db', 'trigger_sql' => true, ]); ``` ### 表结构 系统会自动创建以下数据表: #### crontab_task - 任务表 | 字段 | 类型 | 说明 | | ----------------- | ------- | --------------------------------------------- | | id | INTEGER | 任务ID(主键) | | title | TEXT | 任务标题 | | type | INTEGER | 任务类型(0:请求URL, 1:执行SQL, 2:执行Shell) | | frequency | TEXT | 任务频率(cron表达式) | | shell | TEXT | 任务脚本 | | running_times | INTEGER | 已运行次数 | | last_running_time | INTEGER | 最近运行时间 | | remark | TEXT | 任务备注 | | sort | INTEGER | 排序,越大越前 | | status | INTEGER | 任务状态(0:禁用, 1:启用) | | create_time | INTEGER | 创建时间 | | update_time | INTEGER | 更新时间 | #### crontab_task_log_{YYYYMM} - 执行日志表(按月分表) | 字段 | 类型 | 说明 | | ------------ | ------- | ------------------------------ | | id | INTEGER | ID(主键) | | sid | INTEGER | 任务ID | | command | TEXT | 执行命令 | | output | TEXT | 执行输出 | | return_var | INTEGER | 执行返回状态(0:成功, 1:失败) | | running_time | TEXT | 执行所用时间(秒) | | create_time | INTEGER | 创建时间 | | update_time | INTEGER | 更新时间 | #### crontab_task_lock - 任务锁表 | 字段 | 类型 | 说明 | | ----------- | ------- | ---------------------- | | id | INTEGER | ID(主键) | | sid | INTEGER | 任务ID | | is_lock | INTEGER | 是否锁定(0:否, 1:是) | | create_time | INTEGER | 创建时间 | | update_time | INTEGER | 更新时间 | ### 任务操作 #### 1. 获取任务ID列表 获取所有启用的任务ID列表。 ```php // 返回数组: [1, 2, 3, ...] $taskIds = $db->getTaskIds(); ``` #### 2. 获取单个任务信息 ```php // 返回任务数组或 null $task = $db->getTask(1); ``` 返回示例: ```php [ 'id' => 1, 'title' => '输出 ThinkPHP 版本', 'type' => 2, 'frequency' => '*/3 * * * * *', 'shell' => 'php think version', 'running_times' => 10, 'last_running_time' => 1625636646, 'remark' => '每3秒执行', 'sort' => 0, 'status' => 1, 'create_time' => 1625636609, 'update_time' => 1625636609, ] ``` #### 3. 获取任务列表 ```php $whereStr = '1=1'; // WHERE 条件 $bindValues = []; // 绑定参数 $page = 1; $limit = 15; // 返回: ['list' => [...], 'count' => 10] $result = $db->getTaskList($whereStr, $bindValues, $page, $limit); ``` 带过滤条件的示例: ```php $whereStr = 'title LIKE :title AND status = :status'; $bindValues = [ ':title' => '%版本%', ':status' => 1, ]; $result = $db->getTaskList($whereStr, $bindValues, 1, 15); ``` #### 4. 新增任务 ```php $data = [ 'title' => '新任务', 'type' => 2, 'frequency' => '*/5 * * * * *', 'shell' => 'php think command', 'remark' => '每5秒执行', 'sort' => 100, 'status' => 1, ]; // 返回新增任务的ID $taskId = $db->insertTask($data); ``` #### 5. 更新任务 ```php $id = 1; $data = [ 'title' => '更新后的标题', 'status' => 0, ]; // 返回影响的行数 $affectedRows = $db->updateTask($id, $data); ``` 更新特定字段的快捷方法: ```php $id = 1; // 启用/禁用任务 $db->updateTask($id, ['status' => 1]); $db->updateTask($id, ['status' => 0]); // 更新排序 $db->updateTask($id, ['sort' => 100]); // 更新备注 $db->updateTask($id, ['remark' => '新的备注']); ``` #### 6. 删除任务 ```php // 删除单个任务 $db->deleteTask(1); // 删除多个任务(逗号分隔) $db->deleteTask('1,2,3'); ``` ### 任务状态判断 #### 1. 判断任务是否启用 ```php $status = $db->getTask(1)['status']; $isEnabled = $db->isTaskEnabled($status); // 返回 true 或 false ``` ### 日志操作 #### 1. 获取执行日志列表 ```php $suffix = '202601'; // 年月后缀,如 202601 表示 2026年1月 $whereStr = 'sid = :sid'; $bindValues = [':sid' => 1]; $page = 1; $limit = 15; // 返回: ['list' => [...], 'count' => 50] $result = $db->getTaskLogList($suffix, $whereStr, $bindValues, $page, $limit); ``` #### 2. 插入执行日志 ```php $taskId = 1; $logData = [ 'command' => 'php think version', 'output' => 'v8.0.0', 'return_var' => 0, 'running_time' => '0.123456', ]; // 返回日志ID $logId = $db->insertTaskLog($taskId, $logData); ``` ### 任务锁操作 任务锁用于防止任务并发执行,确保同一时间只有一个实例运行。 #### 1. 获取任务锁信息 ```php $taskId = 1; // 返回锁信息数组或 null $lockInfo = $db->getTaskLock($taskId); ``` 返回示例: ```php [ 'id' => 1, 'sid' => 1, 'is_lock' => 0, 'create_time' => 1625636609, 'update_time' => 1625636609, ] ``` #### 2. 插入任务锁 ```php $taskId = 1; $isLock = 0; // 0:未锁定, 1:已锁定 // 返回锁记录ID $lockId = $db->insertTaskLock($taskId, $isLock); ``` #### 3. 更新任务锁 ```php $taskId = 1; $data = [ 'is_lock' => 1, ]; // 返回影响的行数 $affectedRows = $db->updateTaskLock($taskId, $data); ``` #### 4. 任务加锁 ```php $taskId = 1; // 将任务状态设置为锁定 $db->taskLock($taskId); ``` #### 5. 任务解锁 ```php $taskId = 1; // 将任务状态设置为解锁 $db->taskUnlock($taskId); ``` #### 6. 判断任务是否已锁定 ```php $lockInfo = $db->getTaskLock(1); $isLocked = $db->isTaskLocked($lockInfo['is_lock']); // 返回 true 或 false ``` #### 7. 检查并处理任务锁 自动检查任务锁,不存在则创建,返回当前锁定状态。 ```php $taskId = 1; // 如果锁不存在则创建,返回 false // 如果锁存在则返回当前锁定状态 $isLocked = $db->checkTaskLock($taskId); ``` 使用示例(防止任务并发执行): ```php $taskId = 1; // 检查任务是否已锁定 if ($db->checkTaskLock($taskId)) { echo "任务正在执行中,跳过本次执行"; return; } // 加锁 $db->taskLock($taskId); try { // 执行任务逻辑 executeTask($taskId); } finally { // 解锁 $db->taskUnlock($taskId); } ``` ### 表管理操作 #### 1. 获取数据库所有表名 ```php // 返回数组: ['crontab_task', 'crontab_task_log_202601', 'crontab_task_lock', ...] $allTables = $db->getDbTables(); ``` #### 2. 检查表是否存在 ```php $tableName = 'crontab_task_log_202601'; $exists = $db->isTableExist($tableName); // 返回 true 或 false ``` #### 3. 检查并初始化任务相关表 检查任务表、日志表和锁表是否存在,不存在则创建。日志表按月自动分表。 ```php // 每月首次调用时会自动创建新的日志分表 $db->checkTaskTables(); ``` #### 4. 检查并创建执行日志分表 仅处理日志分表的创建。 ```php $db->checkTaskLogTable(); ``` #### 5. 清理过期日志 清理指定天数之前的日志数据和日志表。这是系统日志自动清理功能的核心方法。 ```php // 清理 30 天前的日志 $days = 30; $result = $db->cleanExpiredLogs($days); // 返回结果 // [ // 'deleted_tables' => ['crontab_task_log_202501', 'crontab_task_log_202502'], // 删除的表列表 // 'deleted_count' => 1500, // 删除的记录数量 // ] ``` **说明**: - 当 `$days <= 0` 时,方法会立即返回空结果,不执行任何清理操作 - 系统会遍历所有日志表(格式: `crontab_task_log_YYYYMM`) - 如果整个月的数据都过期,则直接删除整张表 - 如果表未过期,则只删除表中 `create_time` 字段小于 `$days * 86400` 秒的记录 - 返回值包含两个数组:`deleted_tables`(删除的表名列表)和 `deleted_count`(删除的记录总数) **使用场景**: - 通常由系统自动调用(通过 `log_retention_days` 配置) - 也可以手动调用来执行一次性清理操作 ### 完整使用示例 ```php checkTaskTables(); // 1. 新增任务 $taskId = $db->insertTask([ 'title' => '清理缓存', 'type' => 2, 'frequency' => '0 */30 * * * *', // 每30分钟执行 'shell' => 'php think clear', 'remark' => '自动清理缓存', 'sort' => 100, 'status' => 1, ]); // 2. 查询任务列表 $taskList = $db->getTaskList('status = :status', [':status' => 1], 1, 10); echo "共有 {$taskList['count']} 个任务"; foreach ($taskList['list'] as $task) { echo "任务: {$task['title']} - {$task['frequency']}\n"; } // 3. 执行任务并记录日志 $task = $db->getTask($taskId); if ($db->isTaskEnabled($task['status'])) { // 检查任务锁 if ($db->checkTaskLock($taskId)) { echo "任务正在执行中\n"; return; } // 加锁 $db->taskLock($taskId); $startTime = microtime(true); $command = $task['shell']; $output = shell_exec($command); $endTime = microtime(true); $runningTime = $endTime - $startTime; // 记录日志 $db->insertTaskLog($taskId, [ 'command' => $command, 'output' => $output, 'return_var' => 0, 'running_time' => number_format($runningTime, 6), ]); // 更新任务执行次数 $db->updateTask($taskId, [ 'running_times' => $task['running_times'] + 1, 'last_running_time' => time(), ]); // 解锁 $db->taskUnlock($taskId); } // 4. 查询执行日志 $logResult = $db->getTaskLogList('202601', 'sid = :sid', [':sid' => $taskId], 1, 20); echo "共执行 {$logResult['count']} 次\n"; foreach ($logResult['list'] as $log) { echo "执行时间: " . date('Y-m-d H:i:s', $log['create_time']) . "\n"; echo "输出: {$log['output']}\n"; echo "耗时: {$log['running_time']}秒\n\n"; } // 5. 更新任务 $db->updateTask($taskId, [ 'title' => '清理系统缓存(已更新)', 'status' => 0, // 禁用任务 ]); // 6. 删除任务 $db->deleteTask($taskId); ``` ### 注意事项 1. **日志表按月分表**:`crontab_task_log_YYYYMM`,每月自动创建新表 2. **任务锁机制**:防止任务并发执行,确保同一时间只有一个实例运行 3. **时间戳**:所有时间字段使用 Unix 时间戳(秒级) 4. **返回值类型**: - `insertTask`、`insertTaskLog`、`insertTaskLock` 返回新记录的 ID - `updateTask`、`deleteTask`、`updateTaskLock` 返回影响的行数 - `getTask`、`getTaskLock` 返回记录数组或 null - `getTaskList`、`getTaskLogList` 返回 `['list' => [], 'count' => 0]` 结构 - `cleanExpiredLogs` 返回 `['deleted_tables' => [], 'deleted_count' => 0]` 结构 5. **排序字段**:`sort` 值越大,任务越优先执行 6. **日志自动清理**:通过配置 `log_retention_days` 参数,系统会在每天凌晨 2:00 自动调用 `cleanExpiredLogs()` 方法清理过期日志 ## 任务操作

定时器接口说明

> **重要提示**: 以下接口需要在配置文件中设置 `enable_http => true` 启用 HTTP 服务后才能使用。启用后可通过访问 `base_uri` 地址打开前端管理页面进行可视化操作,或通过以下 API 接口进行编程调用。 > 默认接口地址: http://127.0.0.1:2345 ## PING ### 基本信息 **Path:** /crontab/ping **Method:** GET **接口描述:**
{
  "code": 200,
  "data": "pong",
  "msg": "信息调用成功!"
}
### 请求参数 ### 返回数据
名称类型是否必须默认值备注其他信息
codenumber非必须
datastring非必须
msgstring非必须
## 修改 ### 基本信息 **Path:** /crontab/modify **Method:** POST **接口描述:**
{
  "code": 200,
  "data": true,
  "msg": "信息调用成功!"
}
### 请求参数 **Headers** | 参数名称 | 参数值 | 是否必须 | 示例 | 备注 | | ------------ | --------------------------------- | -------- | ---- | ---- | | Content-Type | application/x-www-form-urlencoded | 是 | | | **Body** | 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 | | -------- | -------- | -------- | ------ | --------------------------------- | | id | text | 是 | 1 | | | field | text | 是 | status | 字段[status; sort; remark; title] | | value | text | 是 | 1 | 值 | ### 返回数据
名称类型是否必须默认值备注其他信息
codenumber非必须
databoolean非必须
msgstring非必须
## 列表 ### 基本信息 **Path:** /crontab/index **Method:** GET **接口描述:**
{
  "code": 200,
  "data": {
    "list": [
      {
        "id": 1,
        "title": "输出 tp 版本",
        "type": 0,
        "frequency": "*/3 * * * * *",
        "shell": "php think version",
        "running_times": 3,
        "last_running_time": 1625636646,
        "remark": "没3秒执行",
        "sort": 0,
        "status": 1,
        "create_time": 1625636609,
        "update_time": 1625636609
      }
    ],
    "count": 1
  },
  "msg": "信息调用成功!"
}
### 请求参数 **Query** | 参数名称 | 是否必须 | 示例 | 备注 | | -------- | -------- | ------------------------ | ------------ | | page | 是 | 1 | 页码 | | limit | 是 | 15 | 每页条数 | | filter | 否 | {"title":"输出 tp 版本"} | 检索字段值 | | op | 否 | {"title":"%*%"} | 检索字段操作 | ### 返回数据
名称类型是否必须默认值备注其他信息
codenumber非必须
dataobject非必须
├─ listobject []非必须

item 类型: object

├─ idnumber非必须
├─ titlestring非必须
├─ typenumber非必须
├─ frequencystring非必须
├─ shellstring非必须
├─ running_timesnumber非必须
├─ last_running_timenumber非必须
├─ remarkstring非必须
├─ sortnumber非必须
├─ statusnumber非必须
├─ create_timenumber非必须
├─ update_timenumber非必须
├─ countnumber非必须
msgstring非必须
## 删除 ### 基本信息 **Path:** /crontab/delete **Method:** POST **接口描述:**
{
  "code": 200,
  "data": true,
  "msg": "信息调用成功!"
}
### 请求参数 **Headers** | 参数名称 | 参数值 | 是否必须 | 示例 | 备注 | | ------------ | --------------------------------- | -------- | ---- | ---- | | Content-Type | application/x-www-form-urlencoded | 是 | | | **Body** | 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 | | -------- | -------- | -------- | ---- | ---- | | id | text | 是 | 1,2 | | ### 返回数据
名称类型是否必须默认值备注其他信息
codenumber非必须
databoolean非必须
msgstring非必须
## 定时器池 ### 基本信息 **Path:** /crontab/pool **Method:** GET **接口描述:**
{
  "code": 200,
  "data": [
    {
      "id": 1,
      "shell": "php think version",
      "frequency": "*/3 * * * * *",
      "remark": "没3秒执行",
      "create_time": "2021-07-07 13:43:29"
    }
  ],
  "msg": "信息调用成功!"
}
### 请求参数 ### 返回数据
名称类型是否必须默认值备注其他信息
codenumber非必须
dataobject []非必须

item 类型: object

├─ idnumber非必须
├─ shellstring非必须
├─ frequencystring非必须
├─ remarkstring非必须
├─ create_timestring非必须
msgstring非必须
## 日志 ### 基本信息 **Path:** /crontab/flow **Method:** GET **接口描述:**
{
  "code": 200,
  "data": {
    "list": [
      {
        "id": 12,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.115895",
        "create_time": 1625636673,
        "update_time": 1625636673
      },
      {
        "id": 11,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.104641",
        "create_time": 1625636670,
        "update_time": 1625636670
      },
      {
        "id": 10,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.106585",
        "create_time": 1625636667,
        "update_time": 1625636667
      },
      {
        "id": 9,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.10808",
        "create_time": 1625636664,
        "update_time": 1625636664
      },
      {
        "id": 8,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.107653",
        "create_time": 1625636661,
        "update_time": 1625636661
      },
      {
        "id": 7,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.105938",
        "create_time": 1625636658,
        "update_time": 1625636658
      },
      {
        "id": 6,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.10461",
        "create_time": 1625636655,
        "update_time": 1625636655
      },
      {
        "id": 5,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.109786",
        "create_time": 1625636652,
        "update_time": 1625636652
      },
      {
        "id": 4,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.115853",
        "create_time": 1625636649,
        "update_time": 1625636649
      },
      {
        "id": 3,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.16941",
        "create_time": 1625636646,
        "update_time": 1625636646
      },
      {
        "id": 2,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.109524",
        "create_time": 1625636643,
        "update_time": 1625636643
      },
      {
        "id": 1,
        "sid": 1,
        "command": "php think version",
        "output": "v6.0.7",
        "return_var": 0,
        "running_time": "0.108445",
        "create_time": 1625636640,
        "update_time": 1625636640
      }
    ],
    "count": 12
  },
  "msg": "信息调用成功!"
}
### 请求参数 **Query** | 参数名称 | 是否必须 | 示例 | 备注 | | -------- | -------- | ----------- | ------------ | | page | 是 | 1 | 页码 | | limit | 是 | 15 | 每页条数 | | filter | 否 | {"sid":"1"} | 检索字段值 | | op | 否 | {"sid":"="} | 检索字段操作 | ### 返回数据
名称类型是否必须默认值备注其他信息
codenumber非必须
dataobject非必须
├─ listobject []非必须

item 类型: object

├─ idnumber必须
├─ sidnumber必须
├─ commandstring必须
├─ outputstring必须
├─ return_varnumber必须
├─ running_timestring必须
├─ create_timenumber必须
├─ update_timenumber必须
├─ countnumber非必须
msgstring非必须
## 添加 ### 基本信息 **Path:** /crontab/add **Method:** POST **接口描述:**
{
  "code": 200,
  "data": true,
  "msg": "信息调用成功!"
}
### 请求参数 **Headers** | 参数名称 | 参数值 | 是否必须 | 示例 | 备注 | | ------------ | --------------------------------- | -------- | ---- | ---- | | Content-Type | application/x-www-form-urlencoded | 是 | | | **Body** | 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 | | --------- | -------- | -------- | ----------------- | ---------------------------------------- | | title | text | 是 | 输出 tp 版本 | 任务标题 | | type | text | 是 | 0 | 任务类型[0请求url; 1执行sql; 2执行shell] | | frequency | text | 是 | */3 * * * * * | 任务频率 | | shell | text | 是 | php think version | 任务脚本 | | remark | text | 是 | 没3秒执行 | 备注 | | sort | text | 是 | 0 | 排序 | | status | text | 是 | 1 | 状态[0禁用; 1启用] | ### 返回数据
名称类型是否必须默认值备注其他信息
codenumber非必须
databoolean非必须
msgstring非必须
## 重启 ### 基本信息 **Path:** /crontab/reload **Method:** POST **接口描述:**
{
  "code": 200,
  "data": true,
  "msg": "信息调用成功!"
}
### 请求参数 **Headers** | 参数名称 | 参数值 | 是否必须 | 示例 | 备注 | | ------------ | --------------------------------- | -------- | ---- | ---- | | Content-Type | application/x-www-form-urlencoded | 是 | | | **Body** | 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 | | -------- | -------- | -------- | ---- | ---- | | id | text | 是 | 1,2 | | ### 返回数据
名称类型是否必须默认值备注其他信息
codenumber非必须
databoolean非必须
msgstring非必须