Azkaban安装部署快速入门:从环境准备到生产模式实战与排坑
一直想把手上的数据处理任务梳理成正式的调度体系但又不想在集群上引入太重的框架这两年开始很多团队把目光投向Azkaban。它轻量、部署简单、通过Web界面拖拽依赖就能把任务串起来在中小规模数据团队里确实非常好用。这篇文章是快速入门系列的第二篇重点讲Azkaban的安装部署从环境准备到数据库初始化再到单机体验模式、生产多执行器模式以及启动验证和常见坑点排查照着做基本能少走一半弯路。1. 安装部署前的核心准备工作1.1 先想清楚你到底需要哪种部署模式Azkaban官方提供了三种部署形态很多人第一次接触容易被文档绕晕这里先帮你把概念理清楚solo-server模式内置H2数据库Web服务、执行器打包在一个进程里适合本地开发、功能体验、跑Demo。它的最大优点就是“零外部依赖”下载解压就能跑缺点很明显单点、数据存文件、换机器即丢绝不能用它承载真实业务。two-server模式Web服务器和执行器分两个进程部署可以落在同一台机器也可以分不同机器共享一个外部MySQL。这是生产环境比较常用的形态我接触过的几个中小型团队大多用的是这种。multiple-executor模式在two-server基础上把执行器横向扩展成多台配合Web端的多执行器路由策略实现负载分发。架构更复杂通常在任务量大到单执行器扛不住时才需要考虑。作为快速入门本文会把重点放在solo-server模式的快速体验和two-server模式的生产级部署这两块。你如果没有现成的大数据环境建议先把solo模式跑通感受一下Azkaban的UI和调度逻辑再切到生产模式不迟。1.2 环境要求与版本选择的经验之谈Azkaban本质上是JVM应用对底层环境要求比较传统。安装之前先确认这几项JDK版本官方要求JDK 1.8以上实测用JDK 8最稳JDK 11也能跑但个别版本在Jetty上会有日志告警没必要去折腾。MySQL推荐5.7或8.0需要提前建好库并准备账号。8.0要注意驱动兼容和密码加密插件5.7几乎无坑。系统CentOS 7.x、Ubuntu 16.04及以上都行Windows不推荐做生产部署很多脚本是bash写的在Windows上要额外装模拟层很别扭。内存solo模式最低2G生产模式Web和执行器各自建议预留1.5G以上如果你部署的机器还要跑Hadoop组件建议4G起步。版本选择上这里强烈建议从GitHub Releases页面找带源码和完整安装包的稳定release比如3.9x系列。不要直接拉master分支自己构建构建过程涉及Gradle下载依赖和插件网络不好或者Gradle缓存被污染的话能折腾你一整天。直接用官方编译好的压缩包解压即用省时省力。2. 数据库环境准备与初始化2.1 创建数据库和账号的几个细节Azkaban的生产模式需要外部MySQL保存三类数据项目定义、调度任务、执行日志。在初始化之前先通过MySQL客户端执行以下SQLCREATE DATABASE azkaban DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER azkaban% IDENTIFIED BY your_strong_password; GRANT ALL PRIVILEGES ON azkaban.* TO azkaban%; FLUSH PRIVILEGES;这里有几个细节我吃过亏值得多写几句第一字符集务必定成utf8mb4而不是utf8。Azkaban的项目描述、调度参数、执行日志里都可能带中文老版本的utf8字符集对四字节emoji字符会直接报错导致写入失败排错排到怀疑人生。第二不要把MySQL账号的host限制写成localhost。如果Web服务器和执行器不在同一台机器localhost的账号在远端连接时会被拒绝。直接用%或者按实际网段精确授权都可以。第三授权粒度给全库就行Azkaban运行时会在这些表上做大量读写不需要精细化到表级别拆得太细反而容易在后续升级或特殊操作时缺权限报错。2.2 初始化脚本到底在哪怎么执行很多人在这个步骤犯迷糊因为Azkaban把初始化脚本放在安装包里而不是给出一份独立的SQL文件。你需要先从官方下载对应的release压缩包把azkaban-db相关的脚本找到。实操流程是这样的解压下载的release包进入azkaban-db目录如果下载的是独立db包也行。在目录下找到create-all-sql-*.sql或者类似命名不同版本命名略有差异有的叫create-all-sql-3.99.0.sql。用命令行执行导入mysql -uazkaban -p -h your_mysql_host azkaban create-all-sql-3.99.0.sql执行结束后进入MySQL确认表是否生成USE azkaban; SHOW TABLES;正常情况下能看到几十张表其中比较关键的几张是executors、projects、schedules、execution_flows。表结构确认无误数据库这块就算准备好了。注意如果你用的是solo-server模式不需要做这一步初始化它用的是内置H2数据库但你也先别急着高兴H2只能用于体验生产切MySQL时还是会回到这一步。2.3 时区问题的前置处理Azkaban对时间非常敏感MySQL连接参数里的时区设置直接决定了调度时间准不准。连接串推荐统一加上serverTimezoneAsia/Shanghai同时MySQL服务端的默认时区也检查一下SELECT global.time_zone, session.time_zone;如果显示SYSTEM再看一下操作系统时区。之前遇到过一个诡异问题调度配置的是每天凌晨2点实际却在早晨8点触发查了一圈发现是MySQL驱动把系统默认时区当成了UTC加上偏移量后整体错了6小时。这种坑在初始环境里提前规避掉后面省很多事。3. 单机快速体验模式部署3.1 下载解压与启动命令solo-server模式下载对应的azkaban-solo-server-*.tar.gz包解压到指定目录tar -zxvf azkaban-solo-server-3.99.0.tar.gz cd azkaban-solo-server-3.99.0目录结构大致如下bin/启动脚本目录核心有azkaban-solo-start.sh和azkaban-solo-shutdown.shconf/配置文件目录核心是azkaban.propertieslib/依赖Jar包plugins/插件目录默认有jobtypes相关插件启动前先给脚本加执行权限然后直接启动chmod x bin/*.sh ./bin/azkaban-solo-start.sh启动完成后检查进程是否存活jps -l能看到AzkabanSingleServer进程就说明JVM层面的启动已经完成。接着看日志确认Web服务是否就绪tail -f logs/azkaban-webserver.log日志里出现Server started或者Jetty初始化完成的字样后打开浏览器访问http://服务器IP:8081就能看到登录页面了。3.2 登录验证与第一个调度任务solo模式的默认账号密码在conf/azkaban.properties里可以查到不同release版本默认密码不一样常见的是azkaban/azkaban如果登录失败就去配置文件里搜user.manager相关的配置项看看默认的管理员账号是什么。登录之后先别急着搭复杂流程建议先复现一个最简单的“串行依赖”在首页点击“Create Project”项目名随意如test_demo。进入项目后点击Upload上传一个zip包里面放test.flow文件和对应的.job文件。test.flow文件内容定义一个简单流程包含两个job第二个依赖第一个。最小化的job文件这样写# first.job typecommand commandecho hello azkaban first# second.job typecommand dependenciesfirst commandecho hello azkaban secondzip打包上传后点击Execute Flow选好调度时间比如当前时间后2分钟点击提交。等执行完成后点进Execution页面就能看到两个job按绿线顺序执行的DAG效果。整个过程顺利走下来你就已经理解Azkaban最核心的“项目-流-作业”三层概念了。3.3 solo模式的边界在哪里什么时候该换solo模式跑顺之后不建议直接在它上面接真实业务原因很简单H2数据库并发能力弱无法多执行器路由重启即丢历史数据。它更像一个教学工具帮你把Azkaban的功能逻辑建立起来。什么时候该切换生产模式我个人的判断标准是任务数量超过10个并且需要保底依赖历史执行记录时需要多人协作编辑不同项目时核心任务需要7x24小时稳定调度不能跟着Web进程一起挂时一旦有了这些信号就可以正式切到two-server部署了。4. 生产环境多进程模式部署实操4.1 Web服务器和执行器的目录规划与安装进入生产模式前先规划好机器和目录。最简单的拓扑是一台机器同时跑Web服务和执行器另一台机器跑MySQL。更稳妥的拓扑是Web一台、执行器一台、MySQL独立一台互不干扰排查问题也清晰。下载对应的两个安装包azkaban-web-server-*.tar.gz包含Web界面、项目管理、调度器、执行器管理azkaban-exec-server-*.tar.gz包含实际干活的任务执行引擎分别解压到不同目录例如mkdir -p /opt/azkaban/web tar -zxvf azkaban-web-server-*.tar.gz -C /opt/azkaban/web mkdir -p /opt/azkaban/exec tar -zxvf azkaban-exec-server-*.tar.gz -C /opt/azkaban/exec4.2 核心配置文件逐项解读两个服务各自有独立的conf/azkaban.properties配置项的含义大部分相同但需要特别注意各自专属的部分。Web端azkaban-web-server的azkaban.properties重点关注# 服务端口默认8081注意不要和系统其他端口冲突 jetty.port8081 # 数据库连接指向你已经初始化好的MySQL database.typemysql mysql.port3306 mysql.hostyour_mysql_host mysql.databaseazkaban mysql.userazkaban mysql.passwordyour_strong_password mysql.numConnections20 # Web服务与执行器的通信地址 azkaban.webserver.external.hostyour_web_host # 管理员账号配置 azkaban.user.manager.classazkaban.user.XmlUserManager user.manager.xml.fileconf/azkaban-users.xml执行器端azkaban-exec-server的azkaban.properties重点关注# 执行器端口默认12321执行器和Web之间的心跳与任务分发走这个端口 executor.port12321 # 数据库连接配置与Web端一致 database.typemysql mysql.port3306 mysql.hostyour_mysql_host mysql.databaseazkaban mysql.userazkaban mysql.passwordyour_strong_password mysql.numConnections20特别注意Azkaban从3.x开始执行器启动后会向数据库的executors表注册自己。Web端在调度时会去这张表查可用的执行器。如果执行器进程无法正常注册Web界面能打开但一执行任务就报“Unable to find any active executors”这是生产模式最经典的报错之一。4.3 执行器激活与Web端连接执行器的关键步骤手动安装执行器时光启动进程是不够的还需要手动把它标记为活跃状态。操作过程如下启动执行器进程cd /opt/azkaban/exec ./bin/azkaban-exec-start.sh jps -l等日志稳定后查询数据库确认执行器是否注册成功SELECT * FROM azkaban.executors;正常情况下表里会有一条记录active字段值为1。如果active字段不生效有些版本在注册后默认不是active需要手动更新UPDATE azkaban.executors SET active 1 WHERE host 你的执行器IP;Web端启动时日志里会打印出它读取到的执行器数量和可用性。确认Web端和执行器网络互通后再执行一次任务测试这时候就能正常分发下去了。4.4 内存参数调整与JVM调优Azkaban的默认JVM参数偏向保守任务量上来后经常出现内存不足或GC停顿。稍微调一下启动参数效果立竿见影。编辑bin/目录下的启动脚本或conf/目录下若有jvm.properties也改这重点调整-Xms和-Xmx# 建议Web端和Executor端都设置至少2G任务多时到4G JAVA_OPTS-Xms2048m -Xmx2048m -XX:MaxMetaspaceSize512m不需要刻意去开G1GC默认的CMS或者并行GC对Azkaban这种中等对象分配频率的场景已经够用。真正容易忽略的是Metaspace长时间运行后ClassLoader加载的Job插件类会越来越多不给足Metaspace很容易频繁Full GC。5. 启动验证与调度体系的功能检查5.1 Web界面完整走查生产模式启动完成后按下面清单过一遍确认整套体系是健康的登录检查用conf/azkaban-users.xml里配置的管理员账号登录Web。项目创建新建一个测试项目上传一个包含多个job的zip包确认文件解析正常。调度配置进入Flow的Schedule界面设置一个几分钟后触发的定时任务提交后确认在Scheduled页面能看到对应条目。执行监控触发执行后进入Executing页面观察DAG进展任务结束后查看日志是否完整。执行器状态在Web界面顶部的“Executeors”菜单部分版本叫“Executor Manager”里确认执行器状态是Active。5.2 命令行快速验证Web与执行器连通性除了Web界面你也可以通过命令行直接验证心跳。在执行器机器上执行curl http://your_web_host:8081/executor 2/dev/null或者在Web服务器机器上检查本机能否访问执行器端口telnet your_exec_host 12321网络互通性检查一旦通过后面调度任务时的坑就少了一半。很多时候Web和执行器明明在同一台机器却因为防火墙或SELinux策略互不相通导致任务一直卡在准备状态。5.3 备份与恢复的粗浅经验生产模式的运行数据全在MySQL里备份就围绕数据库做就好。我通常做两层备份每天凌晨用mysqldump导出全库保留最近7天。每周做一次一致性快照防止备份文件本身损坏。恢复时注意先确认目标库表结构干净再导入备份SQL。如果直接往已有数据的库导入经常因为外键冲突或重复主键导致半途失败。6. 高频坑点排查手册6.1 数据库连接失败与驱动版本不匹配现象Web或执行器启动后日志中反复出现Cannot create JDBC connection或Access denied for user。排查顺序确认MySQL账号密码是否正确直接在命令行用相同账号手动连接试试。确认azkaban.properties中的mysql.host不是127.0.0.1而是真实IP地址否则Web和执行器跨机器连不上。确认MySQL的bind-address配置不是只监听localhost。另外MySQL 8.0版本需要对应版本的JDBC驱动。Azkaban安装包里携带的驱动版本如果偏老在MySQL 8.0上会报Unable to load authentication plugin caching_sha2_password此时需要手动下载新版驱动替换到lib/目录。这个坑在不少团队换MySQL 8.0的时候集体踩过。6.2 执行器注册后状态不对导致的调度失败现象Web界面能打开项目能上传但一点“Execute Flow”就弹错日志提示找不到可用executor。原因执行器注册了但executors表里的active字段是0或者执行器启动时向数据库注册失败。标准解法SELECT id, host, port, active FROM executors; UPDATE executors SET active 1 WHERE id 你的id;然后重启执行器进程等心跳重新上报。别在Web界面反复刷新没有用的它读的一直是数据库里的状态。6.3 任务卡在准备状态或超时无反应现象任务已经提交执行但状态长时间停在PREPARING或READYDAG没有进展。排查路径看Web日志确认是否有Failed to connect to executor字样。检查执行器日志确认是否收到心跳请求。用jstack看执行器进程是否有死锁或卡在某个IO上。这个问题的根源九成是网络不通或者执行器进程假死。很多团队部署在云主机上安全组规则忘了放行12321端口就会出现这种情况。6.4 zip包上传后无法解析或中文乱码现象项目上传后Flow页面显示空白或者job名称中文变成乱码。原因讲解与解法Azkaban对上传的zip包结构非常苛刻所有定时任务的流文件必须放在zip包的根目录或约定目录且文件名、项目名最好保持英文。中文乱码问题先检查服务器系统语言环境是否支持中文再检查azkaban.properties里是否设置了UTF-8相关的编码选项。最省事的做法就是内部约定项目名称和job文件名统一使用英文描述字段可以用中文这样既不影响阅读也避免编码问题。6.5 重启后历史执行记录丢失现象重启Azkaban后之前跑完的任务历史界面变成一片空白。原因与解法分两步检查。先确认数据库是否切换成了MySQL再确认MySQL是否真的存进了数据。如果用的是solo模式那重启丢历史是正常的因为H2数据库文件默认写在临时目录或安装目录下一旦清理就没了。生产模式遇到这种情况大概率是配置文件里数据库连接改了但没生效或者执行器、Web端读取的配置不是同一份文件。6.6 多个执行器端口冲突现象一台机器上部署多个执行器实例或者执行器端口被占用启动日志直接报Port already in use。解法给每个执行器独立的executor.port不要复用同一个端口。另外执行器启动时会绑定本机IP如果机器有多个网卡需要在配置里显式指定azkaban.executor.host避免绑错了网卡导致Web端连不上。7. 个人实测后的几点体会最后聊一点我自己多次部署下来的感受。Azkaban的学习曲线在大数据生态里算是比较友好的部署难点不在技术本身而在三个容易被忽略的底层细节数据库初始化脚本版本要对得上、执行器注册状态要显式确认、Web与执行器之间的端口要提前放通。把这三个环节处理好整个安装部署基本不会卡壳。另外强烈建议无论你是自己学习还是团队引入第一次部署都从solo模式起步花二十分钟把UI和调度逻辑摸熟再切生产模式。直接上生产模式又碰上数据库权限问题时你连“问题出在功能理解还是环境配置”都分不清排错效率反而更低。还有一个小技巧全部部署完毕后把整套配置文件和启动命令整理成一个简单的README.md放在安装目录里把踩过的坑、执行器激活SQL、常用排查命令都记进去。趁着刚部署完记忆新鲜整理出来的文档才是真正有价值的三个月后再补就远不如现在写得全面了。下一篇文章我准备聊聊Azkaban的Job类型和Flow依赖设计这是真正把调度玩明白的关键里面也有不少我之前写job时攒下的模板可以直接借用的经验。

相关新闻

RAG上下文软压缩:OSCAR方案精读与落地实践

RAG上下文软压缩:OSCAR方案精读与落地实践

上周我复盘手头的检索增强问答系统,发现一个很典型的怪相:检索器明明把最相关的文档都捞回来了,拼给模型之后,回答质量反而往下掉。后来我统计了一下拼接进上下文的token分布,10篇文档平均8000多token,真正…

2026/10/17 19:23:47 阅读更多 →
会议纪要哪个软件用户体验好?开完会还得加班整理的人,先看这份实测清单

会议纪要哪个软件用户体验好?开完会还得加班整理的人,先看这份实测清单

一场两小时的跨部门会议,散会之后往往还有另一场"会议"在等着你:翻录音、对笔记、补上漏掉的决定、追问谁负责哪件事。不少职场人的真实体感是,整理一份两小时会议的可读纪要,还要再搭进去一到两个小时。这两年AI会议纪…

2026/10/17 20:20:15 阅读更多 →
小程序购物车开发:全选反选、数量修改、删除与地址联动实现

小程序购物车开发:全选反选、数量修改、删除与地址联动实现

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

2026/10/16 9:36:41 阅读更多 →

最新新闻

C#+OpenCV二维码识别:图像预处理与透视矫正实战解析

C#+OpenCV二维码识别:图像预处理与透视矫正实战解析

这个项目看起来很直接,但实际落地时坑不少。标题是“C#OpenCV识别图片二维码”,拆开看就是三件事:C#做宿主程序、OpenCV做图像处理、二维码识别作为最终目标。很多人一上来就找OpenCV的二维码识别模块,结果发现识别率惨不忍睹&…

2026/10/18 2:59:06 阅读更多 →
Flutter多因子排序:动态权重与概率统计在鸿蒙适配中的实践

Flutter多因子排序:动态权重与概率统计在鸿蒙适配中的实践

如果你维护过带排序列表的App,大概率在某个版本上被多因子业务混战折磨过:用户要综合分,运营要热度加权,产品要新品加权,风控要防刷降权,几个团队各提各的需求,最后全压在ranking模块上。我最初…

2026/10/18 2:59:06 阅读更多 →
Qwen-Agent实战:从对话到代码执行的智能体自动化框架

Qwen-Agent实战:从对话到代码执行的智能体自动化框架

如果你的工作里有一半时间是用来“搬运数据、整理表格、复制粘贴、改格式”,那么Qwen-Agent值得你花半个小时来试一下。这不是那种“跟我对话聊天”的玩具型AI工具,而是一个真正能接手干活的全能助手——给它一个任务描述,它能自动拆解步骤、…

2026/10/18 2:59:06 阅读更多 →
视频流分段返回实战:HTTP Range 原理、实现与避坑指南

视频流分段返回实战:HTTP Range 原理、实现与避坑指南

1. 视频流分段返回到底在解决什么问题第一次接触“视频流分段返回”这个需求,是在一个后台管理系统里。前端要预览一段监控回放,视频文件放在对象存储上,单个文件动辄两三百兆。最开始的做法很粗暴:后端一次性把整个文件读进内存&…

2026/10/18 2:59:06 阅读更多 →
Moonfire NVR:Rust 编写的轻量级本地 IP 摄像机录像系统

Moonfire NVR:Rust 编写的轻量级本地 IP 摄像机录像系统

简介:Moonfire NVR 是一款轻量高效、开源的网络视频录像机(NVR)系统,面向嵌入式安防开发人员、边缘视频存储方案设计者及 Rust/JavaScript 全栈工程师,解决 IP 摄像机 RTSP 流的低开销持久化存储与按需回放问题。资源包…

2026/10/18 2:59:06 阅读更多 →
开源Newsletter系统多租户安全设计:MailCheap从账户隔离到API Key撤销全链路指南

开源Newsletter系统多租户安全设计:MailCheap从账户隔离到API Key撤销全链路指南

【免费下载链接】mailcheap Newsletters where you pay for the emails you send, not for dormant subscribers, at a fraction of the price of beehiiv and the like. Open source: self-host it, or use mailcheap.ai. 项目地址: https://gitcode.com/gh_mirror…

2026/10/18 2:58:05 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →