问题描述
成功调用bmc.kepler.Managers.BlackBox的DumpData方法收集黑盒日志,并返回任务id,现在我需要知道收集黑盒日志任务的进度及状态,怎样获取task对应的object?
代码如下:
日志打印:

环境信息
基于openubmc 2512_lts
~ ~ $ ipmcget -d version
------------------- openUBMC INFO -------------------
IPMC CPU: Hi1711
IPMI Version: 2.0
Active openUBMC Version: 1.17.10
Active openUBMC Build: 01
Active openUBMC Built: 14:33:07 Mar 27 2026
Backup openUBMC Version: 1.17.10
Available openUBMC Version: 1.00.16
Available openUBMC Build: 01
Active Uboot Version: 21.3.10.1 (09:53:00 Dec 30 2025)
Backup Uboot Version: 21.3.10.1 (09:53:00 Dec 30 2025)
Active Secure Bootloader Version: 21.3.10.1 (09:51:37 Dec 30 2025)
Backup Secure Bootloader Version: 21.3.10.1 (09:51:37 Dec 30 2025)
Active Secure Firmware Version: 21.3.10.1 (09:51:38 Dec 30 2025)
Backup Secure Firmware Version: 21.3.10.1 (09:51:38 Dec 30 2025)
Active BMCSDK Version: 5.12.00.01
----------------- Product INFO -----------------
Product ID: 0x0000
Product Name: Atlas 800I A3
Product Unique ID: 0x000000010302BF02
Active BIOS Version: (U75)21.23
Backup BIOS Version: 21.23
重现步骤
见问题描述
期望结果
能正常获取任务的对象并通过任务对象得到进度及状态
实际结果
获取不到任务对象
尝试过的解决方案
无
分析结论
无
@huangzhiyu 使用busctl收集黑盒子日志,任务执行失败了,但任务对象还是在资源数里面保留一段时间的:

查看id为1122151945的task对象,2026-04-11T02:05:14+00:00开始执行,结果报错,但在Sat Apr 11 02:11:34 CGP 2026这个时间点task对象依然保留,所以任务执行完任务对象不会立即销毁的。
get_task_obj这个方法只有创建任务的组件才能获取到对象,其他组件一般是通过代理对象来获取。
require ‘mc.mdb.task_mgmt’
local mdb = require ‘mc.mdb’
local obj = mdb.get_object(bus, path, ‘bmc.kepler.TaskService.Task’)
参数path是不是/bmc/kepler/Managers/1/BlackBox下创建的一个任务对象,但我用local rsp = blackbox_obj:DumpData(context.get_context_or_default(), ‘/tmp/blackbox.tar’)执行成功后/bmc/kepler/Managers/1/BlackBox下没有生成任务对象。
@huangzhiyu
local ok, blackbox_obj = pcall(mdb.get_object, bus,
'/bmc/kepler/Managers/1/BlackBox',
'bmc.kepler.Managers.BlackBox')
if not ok or blackbox_obj == nil then
return false
end
local rsp = blackbox_obj:DumpData(context.get_context_or_default(), ‘/tmp/blackbox.tar’)
能成功收集黑盒日志并且生成文件/tmp/blackbox.tar,返回的rsp里面只有一个TaskId,但/bmc/kepler/Managers/1/BlackBox下没有创建的任务对象,我需要知道的是调用 blackbox_obj:DumpData有没有创建任务对象,如果创建了任务对象怎么获取?
这份代码你调试一下就知道问题了。
参考你之前发的图,只要黑匣子的方法会创建资源树对象,就有对应的资源树路径,你把路径填到path里就行,bus一般就是组件打开的dbus总线。
local obj = mdb.get_object(bus, path, ‘bmc.kepler.TaskService.Task’)
@huangzhiyu 是25.12_lTS这个版本在我们这里跑有问题,收集黑盒日志创建不了任务对象,已经开会找你们的人定位了
现在是什么情况?你之前的帖子里不是有对象吗,怎么现在又没有对象了?
@huangzhiyu 用busctl命令执行是有任务对象的,但任务对象查询结果是执行失败,
而使用网页或者redfish执行下载黑盒日志就没有任务对象。
使用以下代码收集黑盒日志也没有任务对象:
local ok, blackbox_obj = pcall(mdb.get_object, bus,
'/bmc/kepler/Managers/1/BlackBox',
'bmc.kepler.Managers.BlackBox')
if not ok or blackbox_obj == nil then
error(base_msg.InternalError())
return lua_nil
end
local log_file = '/tmp/blackbox.tar'
local rsp = blackbox_obj:DumpData(context.get_context_or_default(), log_file)
if type(rsp) \~= 'table' or type(rsp.TaskId) \~= 'number' then
error(base_msg.InternalError())
return lua_nil
end