Terminus Olares 集群 CronJob 管理实战:olares-cli cluster cronjob 命令全解析
云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载导读本文基于 Terminus 开源仓库中olares-cluster技能套件的 cronjob 参考文档完整讲解olares-cli cluster cronjob的六个核心动词list/get/yaml/jobs/suspend/resume并结合 CLI 源码cli/cmd/ctl/cluster/cronjob与单元测试逐层剖析其 API 调用链、安全约束与底层实现原理。读完你将掌握如何通过命令快速查看计划任务、定位 CronJob 派生的 Job、安全地暂停与恢复调度以及这些命令背后 K8sapis/batch/v1资源模型的真实工作机制。一、前置知识CronJob 在 Olares 运行时视图中的定位olares-cli cluster cronjob别名cronjobs/cj属于olares-cli cluster命令树面向 Olares ControlHub 的 K8s 运行时视图。在动手之前需要先加载两个前置技能文档共享入口 olares-cli shared rules负责技能路由、活动 profile 选择、平台入口点以及认证 proceed/stop 门禁父级技能 cluster (per-user K8s view)定义了身份由活动 profile 决定、可见性与授权由服务端决定、变更类动词必须确认等横切原则。CronJob 对应 Kubernetes 的apis/batch/v1API 组与一次性运行的cluster job属于同一 group/version但二者是两个独立的命令包。从 root.go 的实现注释可以看到拆分原因尽管二者都位于apis/batch/v1但动词集合不同——只有 CronJob 拥有suspend/resume只有 Job 拥有rerunOlares 的 SPA单页应用也将二者建模为兄弟实体jobType枚举中cronjobs与jobs并列历史上 CronJob 曾位于 K8s 1.25 之前才存在的apis/batch/v1beta1现在 Olares 集群只提供 v1 端点CLI 不再引用旧路径。简言之面向计划任务每晚备份、定期清理用cronjob面向一次性批处理迁移、建索引用job。二、动词总览六个核心操作一览Verb用途端点与机制list跨命名空间或单命名空间列表列NAMESPACE / NAME / SCHEDULE / SUSPEND / ACTIVE / LAST-SCHEDULE / AGE/kapis/resources.kubesphere.io/v1alpha3/cronjobs或/kapis/.../namespaces/ns/cronjobsget ns/name单对象纵向摘要ConcurrencyPolicy Active Jobs Job Template Selector/apis/batch/v1/namespaces/ns/cronjobs/nameyaml ns/name完整 K8s 原生 YAML保留服务端返回的全部字段与get相同端点但以原始字节转 YAMLjobs ns/name两步式列出该 CronJob 派生的子 Job--limit N截断显示条数GET CronJob 取 UID 与模板 labels → 列出 Jobs → 客户端按 ownerReferences 过滤suspend ns/name变更类破坏性。PATCH{spec:{suspend:true}}application/merge-patchjson已挂起时无操作短路PATCH/apis/batch/v1/namespaces/ns/cronjobs/nameresume ns/name非破坏性。PATCH{spec:{suspend:false}}已激活时无操作短路无--yes重新启用不算破坏性同 PATCH 端点body 相反所有身份参数遵循namespace/name或-n ns name两种写法由clusteropts.SplitNsName解析全部端点位于https://control-hub.terminus之下认证由活动 profile 透明处理options.go 中 Prepare 的实现会经 refreshingTransport 自动注入并轮换 access token。三、list一眼看清所有计划任务# 跨所有可见命名空间列出计划任务 olares-cli cluster cronjob list # 限定单个命名空间 label 过滤 自定义分页 olares-cli cluster cronjob list -n user-system-alice -l appbackup --limit 50 --page 1list的常用标志来自 list.go标志默认值说明-n, --namespace空所有可见命名空间指定后走namespaces/ns/cronjobs端点表格出现 NAMESPACE 列-l, --label空K8s label-selector 语法如appfoo服务端过滤--limit100KubeSphere 分页的每页大小--all模式下即排空循环的页大小--page11 起始的页码--page N1与--all互斥--allfalse排空所有页直到取尽-o, --outputtabletable或json-q, --quietfalse抑制输出仅以退出码表示成败--no-headersfalse省略表头便于脚本化表格各列语义由 types.go 的三个渲染函数决定SUSPENDTrue/False仅当对象极老且spec.suspend未设置时显示-suspendLabelLAST-SCHEDULEage ago的人类可读相对时间控制器尚未写入lastScheduleTime即创建后从未触发时显示-lastScheduleLabelACTIVE当前活跃正在运行Job 的数量来自status.active。--all与--page1的互斥由 pagination.go 的 Validate 强制返回可读错误而非 cobra 通用报错当单页数据少于总量时stderr 会打印(showing items A-B of TOTAL — pass --page N or --all to see more)提示PrintPageHint。四、get 与 yaml单对象细节与原始定义4.1 get —— 纵向摘要# 完整摘要调度 并发策略 活跃 Job 模板选择器 olares-cli cluster cronjob get user-system-alice/nightly-backup # 脚本友好的 JSON 形态 olares-cli cluster cronjob get user-system-alice/nightly-backup -o json表模式下输出为纵向 key/value 摘要get.go 的 renderGetTable包含字段Schedulecron 表达式如0 2 * * *、Time Zonespec.timeZone非空时显示该字段为 batch/v1 在 K8s 1.27 起的 GA 能力Suspend、Concurrency PolicyAllow/Forbid/Replace仅在服务端填充时显示Starting DeadlinestartingDeadlineSeconds秒数、Successful Jobs History Limit/Failed Jobs History Limit历史 Job 保留上限Active Jobsstatus.active中的对象名按字典序稳定排序便于重复运行 diffLast Schedule、Last Successful均以相对时间呈现、Created、AgeJob Template Selector由spec.jobTemplate.metadata.labels推导出的keyvalue,keyvalue形式选择器见下文 jobs 部分。API 版本细节值得注意get走的是 K8s 原生端点/apis/batch/v1/...。源码注释 get.go 指出SPA 的getCornJobsDetail历史上曾传apis/batch/v1beta1来自其API_VERSIONS.cronjobs常量但该版本已在 Kubernetes 1.25 移除Olares 集群只提供 v1 端点因此 CLI 明确使用 v1。对应的回归测试 get_test.go 将buildGetPath固定为/apis/batch/v1/namespaces/ns/cronjobs/name并验证了命名空间、点号名称以及含斜杠名称的百分号转义防止路径注入到其他资源。同一buildGetPath被get/yaml/suspend/resume四个动词共享——suspend/resume是对get同一 URL 的 PATCH因此只要测试钉住这个 helper四个动词就不会各自漂移。4.2 yaml —— 字节级保真的 K8s 原生 YAMLolares-cli cluster cronjob yaml user-system-alice/nightly-backupyaml与get使用同一端点差异在于yaml通过 yaml.go 将服务端返回的原始 JSON 字节经sigs.k8s.io/yaml直接转为 YAML因此服务端返回的任何字段都会被保留——包括cronjob get的轻量类型 CronJob 未建模的未知字段。该动词刻意不接受--outputYAML 本身就是目的需要 JSON 时请使用get -o json仅提供--quiet标志。五、jobs两步式定位 CronJob 派生的 Job# 查看该 CronJob 最近派生的 10 个 Job olares-cli cluster cronjob jobs user-system-alice/nightly-backup --limit 10这是本命令树中最具实现深度的动词。文档明确说明没有直接列出某 CronJob 所属 Job的服务端端点CLI 必须自行推导父子关系。而当前仓库源码jobs.go已演进为labels 预过滤 ownerReferences UID 权威判定的两步式/三步式流程GET CronJob读取metadata.uid权威匹配键与spec.jobTemplate.metadata.labels优化键列出候选 Job若 jobTemplate 带 labels则用推导出的labelSelectorderived请求/apis/batch/v1/namespaces/ns/jobs让 apiserver 预收窄节省大命名空间下的网络字节若无 labelskubectl/yaml 手写 CronJob 的常见情况则改为无过滤地列出该命名空间下全部 Job客户端按 ownerReferences 过滤仅保留满足Controllertrue UIDparentUID (Kind 为空或为 CronJob)的 JobisChildOfCronJob。其中metadata.ownerReferences才是 K8s 原生的父子绑定事实来源——CronJob 控制器会为每个派生 Job 打上指向父 CronJob UID 的controllertrueOwnerReference无论用户是否在模板里设置 labels。选择器推导只作为尽力而为的优化Job 之间可能共享 labels或与同命名空间手工创建的 Job 撞 label因此 UID 校验是最终权威。实现上的三个细节值得展开不按 Name 匹配CronJob 被删除后用同名重建会获得全新 UID按 Name 匹配会把子 Job 错误归属给新父对象拒绝非 controller 引用Controllerfalse的 ownerRef 只是第三方操作者写入的软引用即使 UID 碰巧一致也不能视为父级空 Kind 被容忍部分 apiserver 内部引用会省略 Kind 字段直接拒绝会导致漏掉合法子 Job。该判定谓词由 jobs_test.go 的TestIsChildOfCronJob以 8 个用例逐项钉死无 ownerRefs 的手工 Job、UID 匹配/不匹配、非 controller 引用、外来 Kind、空 Kind、多 owner 扫描、空 parentUID 永不匹配。版本演进提示文档中描述的jobTemplate 无 labels 时报错行为属于该动词的早期实现源码注释明确指出之前曾依赖 SPA 的 label 重建技巧在 KubeSphere/SPA UI 创建的 CronJob 上可行但遇到 kubectl/yaml 手写 CronJob 就会失败。当前源码已修复为 ownerReferences 方案不再因缺少 labels 而报错而是退化为无预过滤的全量列出再本地过滤。阅读较旧版本的文档或技能说明时应以此仓库源码为准。--limit N控制过滤后展示的条数上限默认 1000表示不限而非 apiserver 请求大小表格列与cluster job list完全一致NAME / COMPLETIONS / STATUS / AGE并复用job.Job.StatusLabel()渲染 STATUSComplete/Failed/Suspended/Running/Failing/Pending见 job/types.go保证同一个挂起 Job 在两个命令树里不会出现Suspended / Pending两种读法。截断时 stderr 提示(showing 5 of 17 matched — pass --limit N to see more)。六、suspend 与 resume安全地暂停与恢复调度# 暂停调度会确认后续计划触发被跳过 olares-cli cluster cronjob suspend user-system-alice/nightly-backup # 脚本化时用 --yes 跳过确认 olares-cli cluster cronjob suspend user-system-alice/nightly-backup --yes # 重新启用 olares-cli cluster cronjob resume user-system-alice/nightly-backupsuspend与resume共享同一 PATCH 通路suspend.go 的 runToggle二者唯一差别是 suspend 值true/false与提示文案GET 当前对象读取spec.suspend现值与resourceVersion无操作短路若目标状态与当前状态一致打印cronjob ns/name is already suspended/active — no changequiet 模式静默跳过 PATCH——省下一次 API 往返与一次无谓的 resourceVersion 递增JSON 模式仍输出合成的toggleResultoperation/namespace/cronjob/suspend/resourceVersion确认门禁仅suspend包裹在ConfirmDestructive中——挂起生产调度虽然可逆但可见地打断下一次触发不会发生所以脚本必须显式传--yesresume在调用处以assumeYestrue传入不弹确认重新启用非破坏性控制器下一个 tick 就会追赶PATCHContent-Type: application/merge-patchjsonbody 为{spec:{suspend:true}}或{spec:{suspend:false}}与 SPA 的 Suspend 开关等价。确认机制的底层实现在 cli/pkg/cliutil/confirm.go--yes直接放行stdin 非 TTY 时报错宁可中断脚本也不在无人审阅时执行破坏操作回答y/yes放行其余任何输入或 EOF 返回aborted by user。安全约束父级 SKILL 的 Mutating 安全契约挂起只停止未来的调度触发已运行的 Job 不受影响——正在执行的备份/清理任务会正常跑完suspend是暂停调度而非删除——通过resume可完全逆转对用户沟通时必须用pause schedule措辞**变更类动词遵循先确认、脚本用--yes、最终由服务端决定**的契约见 olares-cluster SKILL.md 的 Safety and escalation。七、Agent 使用注意判断调度是否真的在触发技能文档给出了面向 Agent 的关键判别套路核心是两步式问答先get查看SUSPEND、LastScheduleTime与Active再jobs查看最近派生的 Job。如果SUSPENDtrue但ACTIVE仍有近期 Job说明这些 Job 是在暂停之后才结束的——它们会正常跑完但不会有新的派生。另一个高价值提醒长时间挂起后 resume 会触发一次追赶式触发。CronJob 控制器在调度被跳过多次后会根据ConcurrencyPolicy与StartingDeadlineSeconds补触发一次。因此对一个已挂起数小时的 CronJob 执行resume前务必先向用户预警这次 catch-up fire例如每天 02:00 的备份在挂起 6 小时后恢复可能立即补跑一次。对应停止每晚运行这类需求优先 suspend 而非 delete挂起保留调度定义与全部历史lastScheduleTime、历史 Job 记录删除则不可逆。八、常见错误速查症状原因处理jobTemplate has no labels — cannot derive selector旧版jobs行为早期实现要求 jobTemplate 必须带 labels 才能推导选择器当前版本已改为 ownerReferences UID 判定、不再依赖 labels如遇旧版行为可先用cluster cronjob yaml人工检查模板与子 Job 的metadata.ownerReferencescronjob already suspended/already active无操作短路提示性通知无需处理JSON 模式返回当前resourceVersioncronjob get返回 404该 profile 下不存在该 CronJob或命名空间不可见用cronjob list核对ns/nameCLI 已使用正确的apis/batch/v1group若对象确实存在可对照cluster application list确认命名空间可见性非 TTY 下suspend报 stdin 错误确认机制拒绝无人审阅的破坏操作脚本化时显式传--yes九、底层实现速览从命令到 K8s API 的调用链olares-cli cluster cronjob verb └─ cmdutil.Factory活动 profile 解析 refreshingTransport 认证 └─ clusterclient.Client指向 https://control-hub.terminus ├─ list → GET /kapis/resources.kubesphere.io/v1alpha3[/namespaces/ns]/cronjobs?limitpage ├─ get → GET /apis/batch/v1/namespaces/ns/cronjobs/name ├─ yaml → GET 同上原始字节→ sigs.k8s.io/yaml ├─ jobs → GET cronjob → GET /apis/batch/v1/namespaces/ns/jobs[?labelSelector] → 客户端 ownerReferences 过滤 └─ suspend/resume → GETRV 感知→ ConfirmDestructive → PATCH application/merge-patchjson关键源码文件索引命令装配与别名root.go类型模型与列渲染辅助types.go列表与分页list.go、pagination.go单对象详情get.go、yaml.go子 Job 定位与 UID 过滤jobs.go、jobs_test.go挂起/恢复共享通路suspend.go、resume.go确认机制confirm.go端点回归测试get_test.go相关阅读cluster job一次性 Job参考 提供了 CronJob 子 Job 的进一步操作pods/events/rerunolares-cluster 技能总览 定义了本命令树完整的动词索引与安全契约。赞分享云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载相关推荐Terminus olares-cli cluster middleware 命令详解基于 olares-cli 的 Olares 托管中间件只读盘点Terminus olares cli cluster middleware 命令详解基于 olares cli 的 Olares 托管中间件只读盘点 本指南云原生后端运维Terminus 集群容器 exec 实战在 Olares 中使用 olares-cli 安全执行容器内命令Terminus 集群容器 exec 实战在 Olares 中使用 olares cli 安全执行容器内命令 本文面向 Terminus 开源仓库中的 ola云原生后端运维Olares 集群 Job 运维指南用 olares-cli cluster job 管理一次性批处理任务Olares 集群 Job 运维指南用 olares cli cluster job 管理一次性批处理任务 olares cli cluster job 别云原生后端运维上一篇IoT-For-Beginners 智能定时器实战使用 LUIS 自然语言理解NLU实现意图与实体解析下一篇Kubernetes SIG Scalability 贡献指南从入门到规模化性能工程实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

前驱图与AOE网:用同一张DAG看懂操作系统与数据结构中的时间形状

前驱图与AOE网:用同一张DAG看懂操作系统与数据结构中的时间形状

期中周的那个深夜,我左手压着操作系统的教材,右手摊开数据结构的复习讲义。一边是前驱图的判断题,一边是AOE网的关键路径大题,我本来只想把这两页一起看掉,省得来回翻书,结果越看越不对劲——怎么它们画出来…

2026/10/13 10:02:18 阅读更多 →
EM算法详解:从隐变量推断到高斯混合模型实战

EM算法详解:从隐变量推断到高斯混合模型实战

1. 这不是数学课,是机器学习里“猜谜游戏”的通关手册 你有没有遇到过这样的场景:训练一个高斯混合模型时,明明数据摆在那里,却不知道每个样本该属于哪个高斯成分;做隐变量建模时,手握观测数据X&#xff0c…

2026/10/13 10:02:18 阅读更多 →
UserCF推荐算法原理与Python工程实践指南

UserCF推荐算法原理与Python工程实践指南

1. 项目概述:为什么UserCF至今仍是推荐系统入门必修课“基于用户的协同过滤算法(UserCF)”这九个字,听起来像教科书里的一个章节标题,但在我带过的二十多个实际推荐项目中,它几乎出现在每一个从零搭建的冷启…

2026/10/13 10:02:18 阅读更多 →

最新新闻

企业采购智能体选型:为什么原生嵌入业务流程更适合核心采购场景?

企业采购智能体选型:为什么原生嵌入业务流程更适合核心采购场景?

随着大模型和Agent进入企业采购,采购智能体正在从简单的问答、文本生成,逐步进入供应商推荐、询价比价、价格分析、合同审查、订单处理、履约分析等真实业务场景。企业在进行采购智能体选型时,也开始面对不同的建设模式。 一种是通用桌面智能…

2026/10/13 10:36:15 阅读更多 →
Typora高级语法实战手册:解决导出PDF翻车与中文排版难题

Typora高级语法实战手册:解决导出PDF翻车与中文排版难题

1. 为什么还在为Typora语法反复查文档?这本实战手册我写了三年Typora不是编辑器,是写作工作流的中枢神经。过去三年里,我用它完成了从技术文档、学术笔记到出版级书稿的全部内容生产——不是“偶尔用用”,而是每天打开即写&#x…

2026/10/13 10:36:15 阅读更多 →
路由概念和路由事件 继承链路 RadioButton的事件解析

路由概念和路由事件 继承链路 RadioButton的事件解析

WPF 中的路由事件 (Routed Events) 是专门为树形 UI 结构设计的事件传递机制。在传统的 C# 开发(如 WinForms)中,事件是“点对点”的(即谁触发、谁响应);而在 WPF 中,所有的 UI 控件都是像树枝一…

2026/10/13 10:36:15 阅读更多 →
SQL Server列存储索引中Delta Store性能影响与治理

SQL Server列存储索引中Delta Store性能影响与治理

1. 为什么“导入数据到Delta Store”是列存储索引性能的隐形开关很多人在SQL Server中建好列存储索引后,第一反应是“查得快了”,接着就急着上线跑报表、做分析。但很快就会发现:同样一个聚合查询,第一次执行慢得像卡住&#xff0…

2026/10/13 10:36:15 阅读更多 →
Odoo Many2one ondelete策略详解:set null、restrict与cascade选型指南

Odoo Many2one ondelete策略详解:set null、restrict与cascade选型指南

1. 从一次数据清理事故说起:为什么ondelete值得单独拎出来讲很多刚接触Odoo ORM的朋友,在定义Many2one字段时,注意力几乎全放在comodel_name和string上,ondelete这个参数往往是顺手一写,甚至直接省略。我见过不少项目里…

2026/10/13 10:36:15 阅读更多 →
模拟器多开网络隔离:Linux命名空间与多实例IP配置指南

模拟器多开网络隔离:Linux命名空间与多实例IP配置指南

这次我们看一个模拟器、云机、安卓手机多开场景里非常实际的需求:能不能做到一个窗口一个实例,各自拥有独立的网络环境和 IP 配置? 先说边界。这个需求在合法场景下,对应的是移动应用测试、网络兼容性验证、自动化回归、协议调试…

2026/10/13 10:35:14 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →