Apache Unomi 3.0.1 常用 CLI 命令与工具详解

梳理 Apache Unomi 3.0.1 常用命令行工具与 Karaf 控制台命令,覆盖服务启停、状态查看、bundle 与 feature 管理、config 配置在线修改和日志查看,全部命令与回显均经真实环境实测。

Apache UnomiApache Unomi2026/10/12

Apache Unomi 3.0.1 常用 CLI 命令与工具详解

Apache Unomi 3.0.1 基于 Apache Karaf 4.4.8 构建,日常运维围绕 bin 目录下的脚本工具与 Karaf 控制台命令展开。本文按「脚本工具 → 控制台命令」的顺序逐条讲解,全部命令与回显均在真实环境实测。

一、环境信息

项目说明
操作系统Ubuntu 22.04.5 LTS
Apache Unomi3.0.1(安装于 /opt/unomi)
Karaf 运行时4.4.8(system:version 实测输出)
OSGi 框架Felix Framework 7.0.5(shell:info 实测输出)
JDKOpenJDK 17.0.20.1
控制台端口8102(SSH 协议,bin/client 默认连接)
管理账号karaf / q1w2e3r4(users.properties 实测配置)

二、工具概览

/opt/unomi/bin 目录下与运维直接相关的脚本工具:

工具用途
bin/status查看运行状态
bin/start以守护方式启动 Karaf
bin/stop优雅停止 Karaf
bin/karafKaraf 主脚本,支持 server(前台)/ run / daemon / client / status / stop / console 子命令
bin/client连接 Karaf 远程控制台执行命令(SSH 到 8102 端口)
bin/setenv环境变量注入文件(JAVA_HOME、JVM 内存等)
bin/instance、bin/shell、bin/inc多实例管理、本地 shell 等发行包附带脚本

注意:bin/karaf 不支持 start 子命令,守护启动应使用 bin/start,服务托管应使用 bin/karaf server 前台模式。

三、前置条件

  1. 已完成 Unomi 3.0.1 部署且系统完全启动(首次启动需执行过一次 unomi:start 初始化)。
  2. 使用 bin/client 前已知晓 Karaf 管理账号凭据(本文示例 karaf / q1w2e3r4)。
  3. 远程控制台 8102 端口本机可达(默认监听 0.0.0.0,生产建议限制为 127.0.0.1 或防火墙屏蔽)。
  4. root 权限执行 bin/start、bin/stop 时注意进程属主:若 Unomi 由专用账号运行,应切换到该账号执行,避免 data 目录属主混乱。

四、工具详解

4.1 bin/status:查看运行状态

/opt/unomi/bin/status

运行中实测回显:

Running ...

停止状态实测回显:

Not Running ...

该脚本通过 instance.properties 中登记的 PID 判断进程存活。注意:以 systemd bin/karaf server 方式启动时,PID 文件写入晚于 systemd 报告 active,启动初期短暂显示 Not Running 属正常现象,以 systemctl status unomi 为准。

4.2 bin/start:守护方式启动

/opt/unomi/bin/start

执行后脚本立即返回,Karaf 在后台完成启动,随后可用 bin/status 确认。适合手工运维场景;生产环境建议使用 systemd 托管(bin/karaf server)而非 bin/start。

4.3 bin/stop:优雅停止

/opt/unomi/bin/stop

实测停止后确认进程已全部退出:

ps -ef | grep karaf.main.Main | grep -v grep | wc -l

实测回显:

0

4.4 bin/karaf server:前台模式启动

/opt/unomi/bin/karaf server

前台运行、日志直接输出到终端,Ctrl+C 会终止进程。systemd 服务单元以该方式作为 ExecStart(Type=simple),是生产环境推荐形态。bin/karaf 的 run 子命令与其类似,daemon 子命令用于无终端守护场景。

4.5 bin/client:连接远程控制台

bin/client 通过 SSH 连接 8102 端口进入 Karaf 控制台,修改密码后必须显式携带凭据。三种使用方式:

方式一,交互模式(进入控制台后输入命令,Ctrl+D 或 logout 退出):

/opt/unomi/bin/client -u karaf -p q1w2e3r4

方式二,标准输入管道执行单条或多条命令(推荐,回显清晰):

echo "system:version" | /opt/unomi/bin/client -u karaf -p q1w2e3r4

实测回显:

4.4.8

方式三,命令作为参数直接执行(仅适合不含空格、括号、引号的简单命令):

/opt/unomi/bin/client -u karaf -p q1w2e3r4 unomi:start

批量执行多条命令时,用 printf 将多行命令经管道一次传入(config:edit 系列必须整批传入,见 4.9 节)。

4.6 系统信息命令:system:version 与 shell:info

system:version 输出 Karaf 版本(注意 4.4.8 中不存在 shell:version 命令):

echo "system:version" | /opt/unomi/bin/client -u karaf -p q1w2e3r4

shell:info 输出运行时全景信息:

echo "shell:info" | /opt/unomi/bin/client -u karaf -p q1w2e3r4

实测回显(节选):

Karaf
  Karaf version               4.4.8
  Karaf home                  /opt/unomi
  OSGi Framework              org.apache.felix.framework-7.0.5

JVM
  Java Virtual Machine        OpenJDK 64-Bit Server VM version 17.0.20.1+1-1-22.04-Ubuntu
  Version                     17.0.20.1
  Pid                         60124
  Max file descriptors        65,535
Threads
  Live threads                110

4.7 bundle:list:查看 OSGi 模块

echo "bundle:list" | /opt/unomi/bin/client -u karaf -p q1w2e3r4

实测共 219 个 bundle,全部 Active。过滤 Unomi 自身模块:

echo "bundle:list" | /opt/unomi/bin/client -u karaf -p q1w2e3r4 | grep -i unomi

实测回显(节选):

177 │ Active   │  75 │ 3.0.1        │ Apache Unomi :: Specification API
178 │ Active   │  75 │ 3.0.1        │ Apache Unomi :: Common Classes
181 │ Active   │  85 │ 3.0.1        │ Apache Unomi :: Extensions :: Lists :: A

首次初始化完成前执行该命令,会看到大量 bundle 处于 Resolved 状态,这是 3.x 首启的正常现象,执行 unomi:start 后全部转为 Active。

4.8 feature:list -i:查看已安装特性

echo "feature:list -i" | /opt/unomi/bin/client -u karaf -p q1w2e3r4 | grep -i unomi

实测回显(节选):

unomi-groovy-actions                 │ 3.0.1            │          │ Started │ unomi-groovy-actions
unomi-kar                            │ 3.0.1            │          │ Started │ unomi-kar
unomi-rest-ui                        │ 3.0.1            │          │ Started │ unomi-kar

4.9 config 系列:查看与在线修改配置

查看指定配置(过滤条件含括号,必须整体加引号并经标准输入传入):

echo 'config:list "(service.pid=org.apache.unomi.persistence.elasticsearch)"' | /opt/unomi/bin/client -u karaf -p q1w2e3r4

实测回显(节选):

Pid:            org.apache.unomi.persistence.elasticsearch
   cluster.name = contextElasticSearch
   elasticSearchAddresses = localhost:9200
   minimalElasticsearchVersion = 9.0.3
   sslEnable = false

在线修改参数(config:edit、config:property-set、config:update 必须在同一次会话依次执行,实测将 defaultQueryLimit 改为 20):

printf 'config:edit org.apache.unomi.persistence.elasticsearch\nconfig:property-set defaultQueryLimit 20\nconfig:update\n' | /opt/unomi/bin/client -u karaf -p q1w2e3r4

修改结果由 fileinstall 回写到 etc/org.apache.unomi.persistence.elasticsearch.cfg(grep 实测 defaultQueryLimit = 20),并自动重载生效,无需重启服务。恢复默认值时按同样方法改回 10。

4.10 log:display:查看日志

echo "log:display -n 2" | /opt/unomi/bin/client -u karaf -p q1w2e3r4

实测回显(示例):

08:29:36.505 INFO [sshd-SshServer[39a04064](port=8102)-nio2-thread-1] Session karaf@/127.0.0.1:49936 authenticated

-n N 表示显示最近 N 条;完整日志文件位于 /opt/unomi/data/log/karaf.log。log:tail 命令可持续跟踪滚动输出,适合排查问题时使用。

4.11 unomi:start:首次初始化命令

Unomi 3.0.1 首次启动时 boot feature 只安装不启动,必须执行一次 unomi:start(官方手册快速开始第 7 步):

echo "unomi:start" | /opt/unomi/bin/client -u karaf -p q1w2e3r4

查看命令帮助:

echo "unomi:start --help" | /opt/unomi/bin/client -u karaf -p q1w2e3r4

实测回显(节选):

DESCRIPTION
        unomi:start

初始化成功后 karaf.log 出现 Server successfully started 31 bundles and 1 required services。该命令幂等:已启动状态下重复执行无副作用,但已初始化的实例重启后无需再执行。

4.12 system:shutdown:停止 Karaf 实例

控制台内置提示 Hit 'system:shutdown' to shutdown Karaf,该命令等效于 bin/stop,执行后 Karaf 优雅退出。以 systemd 托管的实例停止后会被 Restart 策略重新拉起(本文 unomi.service 配置 Restart=on-failure,正常退出不会自动重启),运维时需注意。

五、注意事项

  1. 系统完全启动前 bin/client 不可用:连接会报 Closed 或长时间挂起,脚本化调用务必用 timeout 30 包裹并做重试。
  2. 修改 users.properties 密码后,所有 client 调用必须携带新凭据,否则报 No more authentication methods available。
  3. config:list 的过滤条件、含空格或括号的命令必须经标准输入管道传入,命令行参数形式会导致参数被拆分而报 InvalidSyntaxException。
  4. bin/status 在 systemd 前台模式启动初期可能显示 Not Running(PID 文件写入滞后),判断服务状态以 systemctl status unomi 为准。
  5. config:edit 会话状态与单次连接绑定,edit、property-set、update 必须在同一次 client 调用中完成。
  6. 8102 控制台具备完全管理权限,生产环境务必修改默认密码并限制访问来源。

六、常见问题

**Q1:**执行 shell:version 报 Command not found? Karaf 4.4.8 没有该命令,查看版本使用 system:version,或通过 shell:info 的 Karaf version 字段获取。

**Q2:**config:list 加过滤条件报 InvalidSyntaxException: Missing opening parenthesis? 过滤条件的括号被命令行解析器拆散所致。将整条命令用引号包裹后经标准输入传入:echo 'config:list "(service.pid=org.apache.unomi.persistence.elasticsearch)"' | bin/client -u karaf -p q1w2e3r4。

**Q3:**bin/client 报 Closed 或长时间无响应? 多为系统尚未完全启动,等待 2-5 分钟重试并在脚本中加 timeout;若报 No more authentication methods available 则是凭据错误,核对 users.properties 中的账号密码。

**Q4:**bin/status 显示 Not Running 但服务实际正常? PID 登记文件的写入晚于进程启动,属启动时序现象;以 systemctl status unomi 或 REST 探活(8181 端口)为准,完全启动后 bin/status 会恢复 Running。

**Q5:**config:property-set 修改后配置没有变化? 确认三步在同一会话执行且以 config:update 结尾;随后用 grep 检查 etc 下对应 cfg 文件是否已回写,fileinstall 数秒内自动加载。

**Q6:**首次启动后 8181 无响应、bundle 全部 Resolved? 执行一次 echo "unomi:start" | /opt/unomi/bin/client -u karaf -p q1w2e3r4 完成初始化,详见 4.11 节。

七、参考链接