Kanboard 1.2.56 常用 CLI 命令详解
Kanboard 1.2.56 自带 CLI 全量命令实测详解:db 迁移、cronjob、四条 CSV 导出、用户密码/2FA 重置、插件管理与 CLI/API 分工,全部命令附真实回显与排障坑点。
Kanboard 1.2.56 常用 CLI 命令详解
目标:逐条实测讲清 Kanboard 1.2.56 自带 CLI(
./cli,基于 Symfony Console)的全部常用命令——数据库运维、定时任务、CSV 导出、用户安全重置、插件管理、本地化与前端资源工具,并明确 CLI 与 JSON-RPC API 的分工边界。全部命令与回显均在 v1.2.56 环境实测。
一、环境信息
- 操作系统:Ubuntu 22.04 LTS(x86_64)
- Kanboard:v1.2.56(源码目录
/var/www/kanboard/,标准部署视角;官方 Docker 形态的 CLI 入口路径为应用根下的/var/www/app/cli,执行方式见本站部署篇) - 已有测试数据:项目「运维任务看板」(id=1)含 1 条任务(供导出命令演示)
- 实测日期:2026-10-23;CLI 版本随应用,
./cli version实测回显Kanboard v1.2.56
二、前置条件
- Kanboard 1.2.56 已部署可访问(部署见本站部署篇);
- CLI 以 Web 运行用户身份执行(tar 包部署通常为
www-data),避免产生属主混乱的缓存/日志文件: - 以下所有命令在应用根目录执行:
cd /var/www/kanboard
./cli version
实测回显:
Kanboard v1.2.56
三、命令清单总览
./cli list 的完整清单(25 条,实测):
Kanboard v1.2.56
Usage:
command [options] [arguments]
Options:
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages
Available commands for the "kanboard" namespace:
completion Dump the shell completion script
cronjob Execute daily cronjob
css Minify CSS files
db:migrate Run database migrations
db:version Show database schema version
export:daily-project-column-stats Daily project column stats CSV export
export:subtasks Subtasks CSV export
export:tasks Tasks CSV export
export:transitions Task transitions CSV export
help Display help for a command
job Execute individual job (read payload from stdin)
js Minify Javascript files
list List commands
locale:compare Compare application translations
locale:sync Sync application translations
notification:overdue-tasks Send notifications for overdue tasks
plugin:install Install plugin from remote Zip archive
plugin:uninstall Uninstall plugin
plugin:upgrade Update all installed plugins
projects:archive Disable projects not touched during one year
projects:archive-activities Remove activities from archived projects
projects:daily-stats Calculate daily statistics for all projects
trigger:tasks Trigger task event on all tasks
user:reset-2fa Remove two-factor authentication of a user
user:reset-password Reset user password
version Show application version
worker Execute queue worker
⚠️ 关键边界:CLI 覆盖的是运维型动作(迁移/导出/归档/统计/重置),不包含项目、任务、用户的增删改管理——业务对象管理请走 JSON-RPC API(见第十节)。
四、核心运维命令
本节是日常巡检与升级时最常用的六条命令。
4.1 db:version —— 查看数据库结构版本
./cli db:version
实测回显:
Current version: 128
Last version: 128
解读:Current 是库结构当前版本,Last 是代码期望的最新版本,两者相等即结构一致。升级 Kanboard 后应第一时间对比(不等则执行 db:migrate)。
4.2 db:migrate —— 执行数据库迁移
./cli db:migrate
实测回显(已到最新版时静默通过,仅回显版本号):
Current version: 128
Last version: 128
⚠️ 注意:迁移会修改数据库结构,执行前必须备份(SQLite 形态备份
data/目录即可)。默认配置下应用启动会自动跑迁移(DB_RUN_MIGRATIONS=true),手工执行主要用于关闭自动迁移(DB_RUN_MIGRATIONS=false)的受控变更流程。
4.3 cronjob —— 执行每日定时任务
./cli cronjob
实测回显(无告警项时静默完成):
(空)
这是 Kanboard 内置定时任务的统一入口,等价于 Web 侧「设置 → 定时任务」的每日动作(任务日历提醒、逾期通知、每日统计等)。生产上用系统 cron 每日驱动:
5 3 * * * cd /var/www/kanboard && ./cli cronjob >/dev/null 2>&1
4.4 notification:overdue-tasks —— 逾期任务通知
./cli notification:overdue-tasks
实测回显(无逾期任务时静默):
(空)
扫描所有逾期未完成任务并向订阅者发送通知(依赖邮件配置 MAIL_*,邮件参数详解见本站配置篇)。可挂 cron(如每小时一次)实现逾期即时提醒。
4.5 trigger:tasks —— 重触发任务事件
./cli trigger:tasks
实测回显:
(空)
对全部任务重放事件流水,用于事件驱动相关数据(如自动动作、统计)的补偿修复。日常无需执行,排障或迁移后使用。
4.6 job 与 worker —— 队列体系
Kanboard 支持外部队列(Redis/Jitter)时可用独立 worker 消费任务(邮件发送等异步动作);默认同步执行时这两个命令不参与日常工作流。
./cli help worker
实测回显:
Description:
Execute queue worker
Usage:
worker
job 从 stdin 读取单个 payload 执行,喂入无效内容时的真实回显(排障参考):
echo 'invalid-payload' | ./cli job
实测回显:
[23-Oct-2026 16:50:00 UTC] PHP Warning: Trying to access array offset on null in /var/www/kanboard/app/Core/Queue/JobHandler.php on line 46
Warning: Trying to access array offset on null in /var/www/kanboard/app/Core/Queue/JobHandler.php on line 46
五、项目命令
| 命令 | 作用 | 执行节奏 |
|---|---|---|
projects:daily-stats | 为所有项目计算每日统计(列任务数快照,供分析图使用) | cron 每日 |
projects:archive | 归档整年未被触碰的项目(置为不可见) | cron 每日/每周 |
projects:archive-activities | 清理已归档项目的活动流数据 | cron 每周 |
projects:daily-stats 实测(存在项目「运维任务看板」):
./cli projects:daily-stats
实测回显:
Run calculation for 运维任务看板
projects:archive / projects:archive-activities 实测(当前无满足归档条件的项目,静默完成):
(空)
⚠️ 注意:
projects:archive会真实禁用整年未动的项目(管理员可在界面重新打开)。若不希望自动归档,不要把它挂到 cron。
六、导出命令(export:*)
四条 CSV 导出命令统一格式:export:<对象> <project_id> <start_date> <end_date>(日期格式 YYYY-MM-DD),输出 CSV 到 stdout,配合重定向落文件。
6.1 export:tasks —— 任务导出
./cli export:tasks 1 2026-10-01 2026-10-23
实测回显(表头 + 数据行,供演示):
"Task Id",Reference,Project,Status,Category,Swimlane,Column,Position,Color,"Due date",Creator,"Creator Name","Assignee Username","Assignee Name",Complexity,Title,"Creation date","Modification date","Completion date","Start date","Time estimated","Time spent",Priority,Tags
1,,运维任务看板,Open,,"Default swimlane",Ready,1,Yellow,,admin,,admin,,0,"验证 Kanboard 部署闭环","10/23/2026 16:29","10/23/2026 16:29",,,,,0,
6.2 export:daily-project-column-stats —— 每日列统计导出
./cli export:daily-project-column-stats 1 2026-10-01 2026-10-23
实测回显:
Date,Backlog,Ready,"Work in progress",Done
2026-10-23,0,1,0,0
解读:默认四列(Backlog/Ready/Work in progress/Done)的每日任务数快照——正是绘制累积流图(CFD)的数据源。
6.3 export:subtasks 与 export:transitions
./cli export:subtasks 1 2026-10-01 2026-10-23
./cli export:transitions 1 2026-10-01 2026-10-23
实测回显(无子任务/流转记录时仅返回表头):
"Subtask Id",Title,Status,Assignee,"Time estimated","Time spent","Task Id","Task Title"
Id,"Task Title","Source column","Destination column",Executer,Date,"Time spent"
💡 技术拓展:transitions 导出记录任务每次跨列流转(源列→目标列、操作者、耗时),是计算**周期时间(Cycle Time)**的原始数据——用「任务完成时间 − 进入工作列时间」即可度量团队流动效率。
七、用户与安全命令
7.1 user:reset-password —— 重置用户密码(交互式)
./cli user:reset-password admin
实测回显(输入两次新密码):
What is the new password for admin? (characters are not printed)
Confirmation:
Password updated successfully
口令策略实测(少于 6 位被拒):
The minimum length is 6 characters
⚠️ 重要坑点:重置密码不会解锁被暴力防护锁定的账号——锁定状态(
nb_failed_login/lock_expiration_date)独立于密码存储,锁定期间重置密码后依然登录失败(实测复现见本站配置篇 5.6 节)。需等锁定过期或手工清零这两个字段。
7.2 user:reset-2fa —— 关闭用户两步验证
./cli user:reset-2fa admin
实测回显:
Two-factor authentication disabled
用途:用户丢失验证器(TOTP)后的紧急恢复通道,属管理员兜底操作。
八、插件命令
| 命令 | 作用 |
|---|---|
plugin:install <zip_url> | 从远程 Zip 安装插件 |
plugin:uninstall <plugin_name> | 卸载插件 |
plugin:upgrade | 升级所有已装插件 |
⚠️ 前提:这三条命令受配置
PLUGIN_INSTALLER控制(默认false),未开启时直接拒绝。实测回显(默认配置下执行plugin:install与plugin:upgrade):
In PluginInstallCommand.php line 25:
Kanboard is not configured to install plugins itself
In PluginUpgradeCommand.php line 25:
Kanboard is not configured to install plugins itself
💡 说明:默认关闭插件安装器是官方安全设计(插件无审核机制)。手动安装方式:下载插件 Zip 解压到
plugins/目录后重载服务;确认启用安装器后再用这三条 CLI 命令(配置参数见本站配置篇 5.8 节)。
九、开发与本地化命令
9.1 locale:compare —— 翻译一致性检查
./cli locale:compare
实测回显(节选,对比当前语言与英文源码的翻译差异):
######################################################################
MISSING STRINGS
######################################################################
'Search task title, description, and comments by default' => '',
'This user is not allowed to be assigned to this task' => '',
######################################################################
USELESS STRINGS
######################################################################
'number.decimals_separator' => '',
'number.thousands_separator' => '',
用途:翻译贡献者查缺补漏;运维侧可用来快速确认当前语言包覆盖度。
9.2 locale:sync —— 同步翻译模板
./cli locale:sync 会重写应用内的翻译 PHP 文件,属开发者工具,运维环境不要执行(help 展示即可)。
9.3 js 与 css —— 前端资源压缩
./cli js
./cli css
实测回显(官方预编译形态下源资产不存在):
assets/vendor/text-caret/index.js
assets/vendor/text-caret/index.js not found
assets/css/src/themes/light.css not found
解读:这两条命令供从源码包(GitHub clone)部署时压缩前端资产使用;官方预编译包/官方 Docker 形态不携带源资产,执行报 not found 属预期,不影响运行。
9.4 completion —— Shell 补全脚本
./cli completion bash | head -3
实测回显(完整脚本 84 行):
# This file is part of the Symfony package.
#
# (c) Fabien Potencier <fabien@symfony.com>
按 Symfony Console 标准用法注册到当前 shell 后可对 ./cli 子命令做 Tab 补全。
十、CLI 与 JSON-RPC API 的分工
Kanboard 的 CLI 定位是运维通道,业务对象的增删改查集中在 JSON-RPC API(/jsonrpc.php)。分工对照:
| 需求 | 通道 | 说明 |
|---|---|---|
| 项目/任务/用户/评论/附件增删改 | JSON-RPC API | 官方 API 文档全量方法清单 |
| 数据库迁移/版本查询 | CLI db:* | 仅 CLI |
| 每日任务/逾期通知 | CLI cronjob / notification:overdue-tasks | 仅 CLI |
| CSV 导出(任务/子任务/流转/列统计) | CLI export:* | 仅 CLI |
| 密码/2FA 紧急重置 | CLI user:reset-* | 仅 CLI(API 修改用户走 updateUser) |
| 插件安装/卸载/升级 | CLI plugin:* | 受 PLUGIN_INSTALLER 控制 |
| 外部系统自动建卡 | API createTask/createProject | CI/工单集成标准路径 |
API 快速对照(v1.2.56 为 HTTP Basic 认证):
curl -s -u admin:q1w2e3r4 -X POST http://localhost/jsonrpc.php \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"createTask","id":1,"params":{"title":"来自 API 的任务","project_id":1,"column_id":2}}'
实测回显:
{"jsonrpc":"2.0","result":2,"id":1}
⚠️ 注意:v1.2.56 的 API 认证已改为标准 HTTP Basic(旧教程的
X-RPC-Auth-Username/Password头实测 401);且部分方法签名与旧文档有差异(如getTask仅收task_id一个参数、任务列表方法为getAllTasks)。权威方法清单以应用内源码为准(app/Api/Procedure/*.php)。
十一、常见问题(FAQ)
Q1:CLI 执行报权限错误(无法写 data/ 或 cache/)?
CLI 必须与 Web 运行同一系统用户执行(tar 包通常 sudo -u www-data ./cli …),否则会以 root 生成属主错误的日志/缓存,Web 侧反而写不进去。
Q2:cronjob 挂了 cron 但没有任何通知?
检查三件事:MAIL_* 是否配置为可用 SMTP(用界面「设置」发测试邮件验证)、是否真有到期/逾期数据(notification:overdue-tasks 静默说明无命中)、cron 日志确认命令真实执行。参数排查见本站配置篇 5.3 节。
Q3:升级后要不要手工跑 db:migrate?
默认 DB_RUN_MIGRATIONS=true 时启动自动迁移,无需手工执行;关闭了自动迁移的受控环境,升级流程为:备份 → 替换代码 → ./cli db:migrate → ./cli db:version 确认两个版本号一致(实测回显见 4.1/4.2)。
Q4:为什么没有 project:create / task:create 这样的命令?
Kanboard CLI 的设计边界就是运维动作,业务管理统一走 JSON-RPC API(第十节分工表)。写自动化脚本时:批量建卡用 API,批量导出用 CLI export:*,两者配合覆盖绝大多数场景。
十二、参考链接
- 官方文档(Cronjob):https://docs.kanboard.org/en/latest/admin_guide/cronjob.php
- 官方文档(Database migrations):https://docs.kanboard.org/en/latest/admin_guide/db-migrations.html
- 官方 API 文档:https://docs.kanboard.org/api/
- 源码命令定义(权威清单):仓库
app/Console/*.php - 本站关联文档:《Kanboard 1.2.56 介绍与选型指南》、《Kanboard 1.2.56 Docker Compose 部署指南》、《Kanboard 1.2.56 配置参数详解》