openWrt入门(2) - ubus

打印 上一主题 下一主题

主题 640|帖子 640|积分 1920

ubus - 帮助输出


ubus list  - 列表


要了解当前总线上正在运行哪些服务,只需使用以下  ubus list  命令即可。这将表现向 RPC 服务器注册的所有命名空间的完整列表:
列表表现如下:




指定服务路径来筛选列表


-v选项


   要找出特定服务提供哪些过程/方法及其参数署名,请添加除命名空间路径之外的附加 -v 选项
  





 debug - Fail to connect ubus


先查找进程号
先 
   ps -auxfw | grep ubus
  找到ubus 的进程号

再杀掉进程

kill 进程号  ,杀掉进程
(kill 普通杀,发送请求让进程自尽, kil -9 强杀,不发生请求,直接把进程强制杀死)

杀掉进程后再重启:
   
/etc/init.d/rpcd restart
  
ubus call



参数必须是有效的 JSON 字符串,并根据函数署名设置键和值:




ubus listen 




ubus send 






通过 HTTP 访问 ubus



列出所有运动会话
请尝试 
   ubus call session list
  
解析json文件获取wan 的地址:
此中json 文件通过ubus 指令获取:
   ubus call network.interface.wan status
  
  1. -- 加载 cjson 模块,用于 JSON 数据的编码和解码
  2. local cjson = require("cjson")
  3. -- 检查 cjson 模块是否成功加载
  4. if not cjson then
  5.     -- 如果模块加载失败,打印错误信息并终止执行
  6.     error("Failed to load cjson module")
  7. end
  8. -- 定义一个字符串,包含要执行的 ubus 命令
  9. -- 这个命令用于获取 wan 接口的状态信息
  10. local command = "ubus call network.interface.wan status"
  11. -- 使用 io.popen 执行 ubus 命令,并捕获输出
  12. -- "r" 模式表示以只读方式打开
  13. local handle = io.popen(command, "r")
  14. -- 从命令输出中读取所有数据
  15. local status_json = handle:read("*a")
  16. -- 关闭打开的命令执行句柄
  17. handle:close()
  18. -- 使用 cjson.decode 函数解析 JSON 格式的字符串
  19. -- 将解析后的 Lua 表赋值给变量 status
  20. local status = cjson.decode(status_json)
  21. -- 检查 JSON 解析是否成功
  22. if status then
  23.     -- 检查解析后的表中是否存在 "ipv4-address" 字段
  24.     -- 并且该字段是一个数组且长度大于 0
  25.     if status["ipv4-address"] and #status["ipv4-address"] > 0 then
  26.         -- 提取第一个 ipv4 地址对象的 address 和 mask 字段
  27.         local address = status["ipv4-address"][1].address
  28.         local mask = status["ipv4-address"][1].mask
  29.         
  30.         -- 打印 WAN 接口的 IPv4 地址和子网掩码
  31.         print("WAN IPv4 Address: " .. address .. " with subnet mask /" .. mask)
  32.     else
  33.         -- 如果 "ipv4-address" 字段不存在或数组为空,打印提示信息
  34.         print("WAN interface does not have an IPv4 address")
  35.     end
  36. else
  37.     -- 如果 JSON 解析失败,打印错误信息
  38.     print("Failed to decode JSON response from ubus")
  39. end
复制代码





 namespace 传统解析json


  1. -- load  moudle
  2. require "ubus"
  3. local con = ubus.connect()
  4. if not con then
  5.     error("Failed to connect to ubus")
  6. end
  7. -- Iterate all namespace and procedures
  8. local namespace = con:objects()
  9. for i, n in ipairs(namespace) do
  10.     print("namespace= " .. n) -- ubus list 里面的东西,也即uci那些常用命名空间
  11.     local signatures = con:signatures(n)
  12.     for p, s in pairs(signatures) do
  13.         print("\tprocedures = " .. p)
  14.         for k, v in pairs(s) do
  15.             print("\t\tattribute= " .. k .. " type =" .. v)
  16.         end
  17.     end
  18. end
  19. -- call a  procedure
  20. -- 假设 conn 是已经建立的 ubus 连接
  21. local status = con:call("network.interface.wan", "status", {})
  22. -- 检查 status 是否为 nil 或者空表
  23. if status and status["ipv4-address"] and #status["ipv4-address"] > 0 then
  24.     -- 尝试访问第一个 ipv4 地址的信息
  25.     local address_info = status["ipv4-address"][1]
  26.     if address_info and address_info.address and address_info.mask then
  27.         -- 如果 address 和 mask 都存在,打印它们
  28.         print(address_info.address .. " " .. address_info.mask)
  29.     else
  30.         print("Invalid or missing address or mask information")
  31.     end
  32. else
  33.     print("Failed to retrieve WAN interface status or no ipv4-address information available")
  34. end
  35. --[[
  36. print(" ================================================================ ")
  37. local status = con:call("network.interface.wan","status",{name = "ipv4-address"})
  38. for k,v in pairs(status) do
  39.    print("wan value" .. v)
  40. end   
  41. ]]--
  42. -- close connection
  43. con:close()
复制代码



进程状态总结: 



在 Linux 系统中,查看进程状态时可能会看到 `S` 或 `S+` 如许的状态。这些状态代表了进程的特定就寝模式,详细寄义如下:
   1. S (sleeping):
   - 进程正在就寝状态,等待某个变乱或资源。这是正常的系统行为,比方等待I/O操作完成或等待信号。
  2. S+ (interruptible sleep with optional stops):
   - 进程处于可中断的就寝状态,而且可以响应终端产生的停止信号。这意味着进程正在等待某些条件的发生,但如果收到特定的信号(如停止信号),它可以被中断。
  3. D (uninterruptible sleep):
   - 进程处于不可中断的就寝状态,通常是在等待 I/O 操作完成。在这种状态下,进程不会响应大多数信号,直到它所等待的 I/O 完成。
  4. T (stopped):
   - 进程已被停止,通常是因为收到 `SIGSTOP` 信号。在这种状态下,进程不会执行任何操作,直到收到 `SIGCONT` 信号。
  5. Z (zombie)
   - 这是“僵尸”进程,已经完成执行但尚未被父进程回收。僵尸进程仍然存在于系统中,以便父进程可以读取它的退出状态。
  6. X (dead):
   - 进程已经终止,这是进程生命周期的终极状态。
  在使用 `ps` 命令查看进程状态时,进程的状态列会表现上述某个字母,以表明进程的当前状态。比方:
  

   ps aux | grep <process_name>
 
  输出中可能会看到雷同 `S` 或 `S+` 的状态,表现进程正在就寝。
请注意,进程状态是动态变革的,随着进程的执行和系统变乱的发生,进程的状态会相应地改变。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表