jc --needrestart:把 needrestart -b 的开机重启建议输出转换为 JSON/YAML 的解析器
开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载本文介绍 jc 项目中jc.parsers.needrestart解析器的完整用法与实现原理。needrestart -bbatch 模式是 Debian 系发行版在 apt 升级后提示哪些内核/服务需要重启的标准批量输出其NEEDRESTART-XXX: value行格式对人类友好、对脚本不友好。读完全文你将掌握该解析器的 CLI 两种调用方式、jc.parse模块调用方式、输出 Schema 及各字段含义、-p/-r参数的区别以及解析器源码中行分类、键名规范化raw 与 processed 两套命名和类型转换的实现细节。适用场景与兼容性前提needrestart由 Debian 的needrestart包提供在apt-get upgrade结束后运行通过比对运行中内核与已安装内核、已加载模块与磁盘上的服务依赖等给出需要重启的会话、服务列表。-b参数让其输出机器可读的批量格式这正是 jc 解析器的输入来源。该解析器的平台兼容性为linux这一约束在源码元数据中明确声明见 jc/parsers/needrestart.py 中info.compatible [linux]并由jc.utils.compatibility在每次解析时校验运行平台。CLI 两种调用方式文档给出了等价的两种命令行用法# 方式一管道 $ needrestart -b | jc --needrestart # 方式二jc 直接执行命令magic_commands 机制 $ jc needrestart -b方式二依赖解析器的magic_commands [needrestart -b]元数据jc 会代你执行needrestart -b并把 stdout 交给解析器。两种方式的最终 JSON 结构完全一致。配合常用参数查看效果$ needrestart -b | jc --needrestart -p输出 Schema 与示例处理后processed输出的 Schema 如下所有字段均来自文档声明{ version: string, running_kernel_version: string, expected_kernel_version: string, kernel_status: integer, container: string, session: [string], service: [string], pid: [string] }各字段与needrestart -b原始前缀的对应关系JSON 字段原始前缀含义versionNEEDRESTART-VERneedrestart 工具自身版本running_kernel_versionNEEDRESTART-KCUR当前运行内核版本expected_kernel_versionNEEDRESTART-KEXP已安装升级后内核版本kernel_statusNEEDRESTART-KSTA内核重启状态码整数0 表示无需重启非 0 表示需要处理containerNEEDRESTART-CONT检测到的容器环境如LXC web1sessionNEEDRESTART-SESS可多行建议重启的用户会话列表serviceNEEDRESTART-SVC可多行建议重启的 systemd 服务列表pidNEEDRESTART-PID可多行建议重启的进程进程名PID[,PID...]格式注意session/service/pid三个列表字段是条件性存在的只有当原始输出中出现对应行时才会出现在结果中见文档示例中就不含pid字段。文档示例处理模式-p美化打印$ needrestart -b | jc --needrestart -p { version: 2.1, running_kernel_version: 3.19.3-tl1, expected_kernel_version: 3.19.3-tl1, kernel_status: 1, container: LXC web1, session: [ metabase user manager service, root session #28017 ], service: [ systemd-journald.service, systemd-machined.service ] }raw 模式-r参数与键名规范化追加-r时jc 输出未经_process处理的原始结构化数据键名保留needrestart前缀且kernel_status未做类型转换$ needrestart -b | jc --needrestart -p -r { needrestart_ver: 2.1, needrestart_kcur: 3.19.3-tl1, needrestart_kexp: 3.19.3-tl1, needrestart_ksta: 1, needrestart_cont: LXC web1, needrestart_sess: [ metabase user manager service, root session #28017 ], needrestart_svc: [ systemd-journald.service, systemd-machined.service ] }从 raw 键名可以看出命名规则解析器先按行前缀拆分如NEEDRESTART-VER: 2.1再把键名规范化为小写下划线形式needrestart_ver由 jc/utils.py 中的normalize_key完成。-r模式适合调试或希望保留原始字段语义的脚本默认不传-r模式则由_process把键重命名为更简洁的 Schema 名称。源码实现解析解析器全部逻辑在 jc/parsers/needrestart.py 中结构简洁分为三层元数据info、主函数parse、后处理_process。parse按行前缀分类parse(data, rawFalse, quietFalse)先做平台兼容性与输入类型检查jc.utils.compatibility、jc.utils.input_type_check然后在有数据时逐行扫描按行首前缀分为五类单值行NEEDRESTART-VER、NEEDRESTART-KCUR、NEEDRESTART-KEXP、NEEDRESTART-KSTA、NEEDRESTART-CONT。用line.split(:, maxsplit1)拆出键值值strip()后写入raw_output。注意maxsplit1保证了值本身含冒号如时间戳类输出也不会被误切。多值行NEEDRESTART-SESS、NEEDRESTART-SVC、NEEDRESTART-PID各自累积到sess_list、svc_list、pid_list循环结束后若列表非空才写回raw_output对应needrestart_sess/needrestart_svc/needrestart_pid键——这就是上述条件性字段的来源。其他行直接忽略任何不以上述前缀开头的行包括 needrestart 自身的 Perl 告警行都不会进入结果。空输入时直接返回空字典raw_output {}配合jc.utils.has_data守卫不会抛异常。_process类型转换与键重命名_process维护一张固定映射表key_map把 raw 键改名为 Schema 键key_map { needrestart_ver: version, needrestart_kcur: running_kernel_version, needrestart_kexp: expected_kernel_version, needrestart_ksta: kernel_status, needrestart_svc: service, needrestart_cont: container, needrestart_sess: session, needrestart_pid: pid }同时特判needrestart_ksta通过jc.utils.convert_to_int把1转成整数1使kernel_status在 JSON 中是integer而非字符串。测试 tests/test_needrestart.py 中的run_all_fixtures会遍历所有 fixture 验证这一转换结果。测试 fixture 揭示的真实边界仓库提供了三组 fixture位于 tests/fixtures/generic/覆盖了文档示例之外的真实场景很有参考价值needrestart--standard.out与文档示例同构的完整输出VER/KCUR/KEXP/KSTA/CONT 2 行 SVC 2 行 SESS期望结果 needrestart--standard.json 中kernel_status为整数1验证了类型转换与键重命名。needrestart--pid.out只有NEEDRESTART-PID多值行的最小输出期望 needrestart--pid.json 只含version和pid两个字段其中 pid 元素保留进程名PID原样如dbus-daemon1754,2037——说明解析器对 pid 值只做整行收集不做二次拆分。needrestart--extralines.out最关键的健壮性样本。它包含文档 Schema 之外的NEEDRESTART-UCSTA、NEEDRESTART-UCCUR、NEEDRESTART-UCEXP行微码检查相关以及一行 Perl 告警Use of uninitialized value $uccode_vars{AVAIL} in concatenation (.) or string at /usr/sbin/needrestart line 904.期望输出 needrestart--extralines.json 只保留了 Schema 内的字段version、running_kernel_version、expected_kernel_version、kernel_status、service。可以确认未识别前缀的行与告警文本被安全丢弃解析器不会因发行版差异新增的行而报错也不会把未知字段混入结果。作为 Python 模块使用除 CLI 外文档声明的模块用法适用于自动化脚本import jc result jc.parse(needrestart, needrestart_command_output)参数与parse函数签名一致参数类型说明datastr待解析的文本即needrestart -b的完整 stdoutrawbool默认 False为 True 时返回未处理数据needrestart_*键名ksta为字符串quietbool默认 False为 True 时抑制警告信息返回值为字典processed或原始字典raw。典型场景在 Ansible/部署脚本里subprocess抓取needrestart -b输出后jc.parse然后判断result.get(kernel_status) ! 0或result.get(service)非空来触发重启提醒——相比 grep 原始文本JSON 判断天然免疫格式漂移。小结用法needrestart -b | jc --needrestart或jc needrestart -b仅支持 Linuxprocessed 输出 8 个 Schema 字段session/service/pid按原始输出出现与否条件存在kernel_status为整数-r输出needrestart_*前缀的 raw 键名其中ksta保持字符串源码按行前缀分类 → 条件性列表收集 → 键重命名 整数化三步实现未识别行含 UC* 微码字段与 Perl 告警被安全忽略行为由三组 generic fixture 锁定。赞分享开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载相关推荐jc lspci 解析器把 PCI 设备清单输出转换为结构化 JSON 的完整解析机制jc lspci 解析器把 PCI 设备清单输出转换为结构化 JSON 的完整解析机制 本文以 jc 仓库中的 lspci 解析器为核心完整讲解它支持的三种开发工具jc 的 lsblk 解析器把 Linux 块设备树输出转换为结构化 JSON 的完整指南jc 的 lsblk 解析器把 Linux 块设备树输出转换为结构化 JSON 的完整指南 本篇基于 jc 仓库的 lsblk 解析器文档 https://l开发工具zip.js Zip64深度解析突破4GB限制处理超大文件zip.js Zip64深度解析突破4GB限制处理超大文件 zip.js是一款功能强大的JavaScript库支持多核心压缩、压缩流、Zip64格式、分卷文上一篇如何用Kazumi打造你的个性化番剧收藏库从安装到自定义的完整指南下一篇如何用3步让2008年MacBook运行最新macOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AMD官网下载Vivado遇合规性失败?全流程排查与解决指南

AMD官网下载Vivado遇合规性失败?全流程排查与解决指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 5:41:31 阅读更多 →
Atlas 300V 24G跑YOLO全流程:从环境搭建到推理优化

Atlas 300V 24G跑YOLO全流程:从环境搭建到推理优化

干了这么多年AI部署,说实话被各种推理卡折磨过不少回,Atlas 300V 24G 这张卡算是让我印象比较深的一张。一开始单纯以为它就是一张普通的 PCIe 加速卡,结果从驱动到算子适配到模型转换,每一步都有它自己的脾气。这篇文章就围绕 At…

2026/9/25 5:40:31 阅读更多 →
Atlas 300V 24G推理加速卡部署YOLOv5全流程实战

Atlas 300V 24G推理加速卡部署YOLOv5全流程实战

最近在折腾Atlas这块卡,把YOLO模型从PyTorch一路迁移到昇腾推理环境,踩了不少坑,也终于理清了整套流程。先说结论:Atlas 300V 24G确实是运算加速卡,但更准确的说法是AI推理加速卡,它和打游戏的显卡、跑训练…

2026/9/25 5:40:31 阅读更多 →

最新新闻

杜比5.1测试视频:家庭影院音频校准实战指南

杜比5.1测试视频:家庭影院音频校准实战指南

1. 这不是普通测试片,而是一把“耳朵标尺”你有没有遇到过这样的情况:花了几千块买了新电视,接上回音壁,满心期待杜比5.1环绕声的沉浸感,结果一开电影——人声全挤在中间,爆炸声像从左耳塞里蹦出来的&#…

2026/9/25 6:05:48 阅读更多 →
工业AR智能巡检方案落地实战:从PPT到现场,避坑指南与代码复现

工业AR智能巡检方案落地实战:从PPT到现场,避坑指南与代码复现

简介:这份PPT方案面向工业运维工程师、设备管理人员及AR技术方案选型者,系统梳理了以XR技术为核心的智能巡检落地路径,重点解决传统巡检中状态参数无法实时查看、误操作漏检、专业水平参差与应急处理能力不足等痛点。包内共1个pptx文件&#…

2026/9/25 6:05:48 阅读更多 →
校园卡服务管理系统JavaWeb毕业设计完整实现与部署指南

校园卡服务管理系统JavaWeb毕业设计完整实现与部署指南

1. 毕业设计选这个课题,到底值不值每年到了毕设季,咨询我最多的JavaWeb方向题目就是这类"管理系统"题:学生管理系统、图书管理系统、校园卡服务管理系统。很多同学觉得这类题太普通,担心答辩时被导师挑刺。以我带过的多…

2026/9/25 6:05:48 阅读更多 →
电压基准芯片国产替代实战:选型、引脚兼容与实测避坑指南

电压基准芯片国产替代实战:选型、引脚兼容与实测避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:05:48 阅读更多 →
如何5分钟上手 NeoHorse-1-4B:从下载到第一次对话的完整教程

如何5分钟上手 NeoHorse-1-4B:从下载到第一次对话的完整教程

如何5分钟上手 NeoHorse-1-4B:从下载到第一次对话的完整教程 【免费下载链接】NeoHorse-1-4B 项目地址: https://ai.gitcode.com/hf_mirrors/TokenRhythm/NeoHorse-1-4B 想快速跑通一个能"动手干活"的 AI 模型吗?NeoHorse-1-4B 是一个…

2026/9/25 6:05:48 阅读更多 →
VisiData 列系统深度指南:Column 计算引擎、类型系统与聚合器实战

VisiData 列系统深度指南:Column 计算引擎、类型系统与聚合器实战

数据分析CLI数据可视化 【免费下载链接】visidata A terminal spreadsheet multitool for discovering and arranging data 项目地址: https://gitcode.com/gh_mirrors/vi/visidata 点击查看 免费下载 导读:本文围绕 VisiData 的 Column 体系展开&#…

2026/9/25 6:04:47 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →