Oxidized 0.37.0 配置参数详解
Oxidized 0.37.0 配置参数逐项详解:凭据/机型/调度/vars/groups、CSV 与 SQL 数据源、File 与 Git 输出,全部按改值-验证-还原实测闭环。
Oxidized 0.37.0 配置参数详解
目标:逐项讲清 Oxidized 0.37.0 配置文件(
/etc/oxidized/config)的核心参数、数据源(CSV/SQL)与输出(File/Git)配置,每个关键参数按「改值 → 验证 → 还原」实测闭环演示,并给出可直接落地的生产配置模板。全文命令与回显均在 Ubuntu 22.04.5 LTS 服务器实测通过(Oxidized 0.37.0,systemd 托管, oxidized-web 0.18.1)。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64,内核 6.8.0-138-generic)
- Oxidized 0.37.0(
oxidized --version实测:0.37.0),oxidized-web 0.18.1,rugged 1.9.6,sequel 5.109.0 + sqlite3 2.0.4 - 配置目录:
/etc/oxidized(由 systemd 单元Environment=OXIDIZED_HOME=/etc/oxidized指定),主配置文件/etc/oxidized/config,运行账号oxidized,服务单元oxidized.service - 备份对象:SSH 可达的 Linux 设备
sw01(10.89.58.20,账号 admin/q1w2e3r4,机型 linuxgeneric),CSV 清单/etc/oxidized/router.db与 SQLite 清单/etc/oxidized/nodes.db两种数据源均实测跑通 - 参数语义取证来源:首次运行自动生成的配置模板、
oxidized --show-exhaustive-config输出、0.37.0 源码lib/oxidized/config.rb与lib/oxidized/source/、lib/oxidized/output/
二、前置条件
本文的参数实验基于已安装并可运行的 Oxidized 服务(安装步骤见《Ubuntu 22.04 安装 Oxidized 指南》)。开始前确认基线状态:
systemctl is-active oxidized
curl -s http://127.0.0.1:8888/nodes.json | head -c 200
实测回显:
active
[{"name":"sw01","full_name":"sw01","ip":"10.89.58.20","group":"default","model":"LinuxGeneric","last":{"start":"2026-10-22 09:21:05 UTC","end":"2026-10-22 09:21:10 UTC","status":"success","time":5.325234613},"vars":{},"mtime":"2026-10-22 09:21:11 UTC","status":"success","time":"2026-10-22 09:21:10 UTC"}
验证要点:服务 active 且节点 status: success,以此为基线做后续「改值 → 验证 → 还原」实验。
另外准备 Git 输出实验所需的 rugged(Git 后端)与 SQL 源实验所需的 sequel/sqlite3:
gem list | grep -E '^(rugged|sequel|sqlite3)'
实测回显:
rugged (1.9.6)
sequel (5.109.0)
sqlite3 (2.0.4)
三、参数查看与修改方式
查看有两种途径。其一是直接读配置文件 /etc/oxidized/config;其二是用 --show-exhaustive-config 输出「含全部默认值的穷举配置」,排查「某个键默认到底是什么」时最有用:
OXIDIZED_HOME=/etc/oxidized oxidized --show-exhaustive-config
实测回显(节选,前 42 行):
---
username: admin
password: q1w2e3r4
model: linuxgeneric
resolve_dns: true
interval: 3600
debug: false
run_once: false
threads: 30
use_max_threads: false
timeout: 20
timelimit: 300
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
next_adds_job: false
vars: {}
groups: {}
group_map: {}
models: {}
pid: "/etc/oxidized/pid"
extensions:
oxidized-web:
load: true
listen: 0.0.0.0
port: 8888
crash:
directory: "/etc/oxidized/crashes"
hostnames: false
stats:
history_size: 10
input:
default: ssh, telnet
debug: false
ssh:
secure: false
ftp:
passive: true
utf8_encoded: true
output:
default: file
git:
user: Oxidized
修改必须遵循一条铁律:改完 /etc/oxidized/config 后要 systemctl restart oxidized 才生效。Oxidized 只在进程启动时读取全局配置;REST API GET /reload 只重载节点清单,不重载全局参数(实测:改 password 后调用 /reload,节点仍按旧凭据成功抓取;systemctl restart 后新凭据才生效并抓取失败——见 5.1 实测)。
⚠️ 注意:
/etc/oxidized/config归运行账号所有(chown oxidized:oxidized),否则 systemd 下进程读不到写不进。YAML 中正则要用!ruby/regexp标签写法(如delimiter: !ruby/regexp /:/),直接写/…/会被当成字符串导致源解析失败。
四、参数总览
/etc/oxidized/config 顶层参数速查(默认值来自 0.37.0 首次生成模板与 lib/oxidized/config.rb,均为实测取证):
| 参数 | 默认值 | 作用 |
|---|---|---|
| username / password | username / password | 登录设备的全局默认凭据(节点级可覆盖) |
| model | junos | 未在清单中指定机型时的默认机型 |
| resolve_dns | true | 是否把设备名解析为 IP |
| interval | 3600 | 每台设备的抓取周期(秒) |
| debug | false | 调试日志开关(配合 -d 命令行参数) |
| run_once | false | 抓取一轮后退出(一次性任务场景用) |
| threads / use_max_threads | 30 / false | 工作线程数 / 是否按设备数吃满线程 |
| timeout / timelimit / retries | 20 / 300 / 3 | 单会话超时(秒)/ 单节点总时限(秒)/ 失败重试次数 |
| prompt | /^([\w.@-]+[#>]\s?)$/ | CLI 提示符识别正则 |
| next_adds_job | false | /node/next 是否立即入队执行 |
| vars | {} | 全局机型变量(如 enable: <enable 密码>) |
| groups / group_map | {} / {} | 分组配置与组别名映射 |
| models | {} | 机型级配置(如指定某机型的 vars) |
| pid | /etc/oxidized/pid | PID 文件路径 |
| extensions.oxidized-web | load: false(listen 127.0.0.1、port 8888) | Web UI + REST API 扩展 |
| crash | directory: <ROOT>/crashes、hostnames: false | 崩溃转储目录与文件名形态 |
| stats.history_size | 10 | 每节点统计采样保留条数 |
| input | default: ssh, telnet 等 | 登录方式族参数 |
| output | default: file | 配置输出后端(file / git) |
| source | default: csv | 设备清单来源(csv / sql) |
| model_map | juniper→junos、cisco→ios | 清单机型别名归一化 |
表格解读:这批参数分四族——凭据/机型(5.1)、调度并发(5.2)、变量分组(5.3)、IO 三件套 input/output/source(5.4–5.6),加上 Web 扩展(5.7)与运行时杂项(5.8),下文逐族详解。
五、核心参数分类详解
5.1 身份与设备默认参数(username / password / model / model_map / resolve_dns)
全局 username/password 是所有节点的默认登录凭据;router.db 里节点级列(见 5.6 的 vars_map/列映射)可按节点覆盖。model 只对「清单里没写机型」的节点生效——节点级 model(router.db 第 2 列)优先于全局 model(实测:全局改为 ios 而清单写 sw01:linuxgeneric 时,/nodes.json 的 model 仍是 LinuxGeneric 且抓取成功)。
实测一:凭据改错 → 失败 → 还原。 把 password 改成错误值并重启:
sed -i 's/^password: .*/password: wrong-pass/' /etc/oxidized/config
systemctl restart oxidized
sleep 85
curl -s http://127.0.0.1:8888/nodes.json | python3 -c 'import json,sys; d=json.load(sys.stdin)[0]; print("status:",d["status"],"| last:",d["last"]["status"] if d.get("last") else None)'
journalctl -u oxidized -o cat --no-pager -n 200 | grep -iE 'raised' | tail -1
实测回显:
status: no_connection | last: no_connection
2026-10-22 09:29:37.096478 W [11287:Job 'sw01'] Oxidized::Node -- 10.89.58.20 raised Net::SSH::AuthenticationFailed with msg "Authentication failed for user admin@10.89.58.20"
解读:错误凭据下节点进入 no_connection 状态,日志按 retries: 3 每隔约 5 秒重试并抛 Net::SSH::AuthenticationFailed。还原后恢复:
sed -i 's/^password: .*/password: q1w2e3r4/' /etc/oxidized/config
systemctl restart oxidized
sleep 16
curl -s http://127.0.0.1:8888/nodes.json | python3 -c 'import json,sys; print("status:", json.load(sys.stdin)[0]["status"])'
实测回显:
status: success
实测二:全局 model 指向不匹配机型。 让清单不指定机型(router.db 只写 sw01),全局 model: ios(Cisco IOS 模型去登 Linux 设备):
echo 'sw01' > /etc/oxidized/router.db
sed -i 's/^model: .*/model: ios/' /etc/oxidized/config
systemctl restart oxidized
sleep 85
curl -s http://127.0.0.1:8888/nodes.json | python3 -c 'import json,sys; d=json.load(sys.stdin)[0]; print("model:",d["model"],"status:",d["status"],"last:",d["last"]["status"])'
journalctl -u oxidized -o cat --no-pager -n 60 | grep -iE 'raised' | tail -1
实测回显:
model: IOS status: no_connection last: no_connection
2026-10-22 09:52:50.065956 W [17187:Job 'sw01'] Oxidized::Node -- 10.89.58.20 raised Oxidized::PromptUndetect with msg "Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 6.8.0-138-generic x86_64)
解读:机型不匹配时典型报错是 Oxidized::PromptUndetect——IOS 模型认不出 Ubuntu 的 shell 提示符。还原:
sed -i 's/^model: .*/model: linuxgeneric/' /etc/oxidized/config
echo 'sw01:linuxgeneric' > /etc/oxidized/router.db
systemctl restart oxidized
sleep 12
curl -s http://127.0.0.1:8888/nodes.json | python3 -c 'import json,sys; d=json.load(sys.stdin)[0]; print("restore:",d["model"],d["status"])'
实测回显:
restore: LinuxGeneric success
model_map 用于把清单里的机型别名归一化(默认 juniper: junos、cisco: ios),比如清单里习惯写 cisco,会自动映射为 ios 模型,无需逐行改清单。resolve_dns: true 表示节点名会先做 DNS 解析(域名清单场景开启;纯 IP 清单可关掉省一次解析)。
5.2 调度与并发(interval / threads / use_max_threads / timeout / timelimit / retries / run_once / next_adds_job)
interval: 3600:每台设备两次抓取的间隔(秒),按节点错峰排队执行。改小即加密备份频率。threads: 30:并发抓取线程数;use_max_threads: false时按「interval 内均匀铺开」调度,true时有多少设备就尽量开多少线程。timeout: 20:单次 SSH/Telnet 会话超时(秒);timelimit: 300:单节点一轮抓取的总时限(秒);retries: 3:失败重试次数(5.1 实测中能看到 3 次重试日志)。run_once: false:设为true则抓完一轮即退出(配合 cron/CI 做一次性全量备份)。next_adds_job: false:设为true时/node/next直接把节点加入立即执行队列。
实测:interval 60 的生效验证。 把 interval 改为 60 并重启,随后改动一次设备侧配置(模拟设备变更),观察日志中入库动作落在一个 60 秒周期内:
sed -i 's/^interval: 3600$/interval: 60/' /etc/oxidized/config
systemctl restart oxidized
sleep 5
# 在设备上追加一行 motd 模拟配置变更
journalctl -u oxidized -o short --no-pager | grep 'Configuration updated' | tail -1
实测回显:
Oct 22 09:36:50 oxp1 oxidized[11399]: 2026-10-22 09:36:50.853534 I [11399:1380] Oxidized::Worker -- Configuration updated for /sw01
还原为 3600 并确认基线:
sed -i 's/^interval: 60$/interval: 3600/' /etc/oxidized/config
systemctl restart oxidized
sleep 10
curl -s http://127.0.0.1:8888/nodes.json | python3 -c 'import json,sys; d=json.load(sys.stdin)[0]; print("final:",d["status"])'
实测回显:
final: success
💡 说明:
Configuration updated只在设备配置发生变化时打印——配置没变时 Oxidized 不重复入库(这也是它判断「变更」做 diff 推送的基础)。因此验证 interval 生效要么制造一次设备变更看入库时间是否落在新周期内,要么临时开debug: true看每轮调度日志。
5.3 变量与分组(vars / groups / group_map / models)
vars: {}:全局机型变量,最常见的用法是给需要特权模式的机型传 enable 密码(源码 config.rb 内注释原文:could be 'enable'=>'enablePW'),机型模型里通过vars(:enable)引用;groups: {}:分组级配置,同组节点共享一组凭据/参数(按机房、厂商分组管理账号);group_map: {}:组别名映射(如edge: access),清单里写别名归并到正式组名;models: {}:机型级配置,如models: { ios: { vars: { enable: q1w2e3r4 } } }只对 ios 机型生效。
实测:CSV 第三列映射为 group。 给 source.csv.map 增加 group: 2,清单第三列写组名,groups 里声明该组:
source:
default: csv
csv:
file: "/etc/oxidized/router.db"
delimiter: !ruby/regexp /:/
map:
name: 0
model: 1
group: 2
groups:
core: {}
echo 'sw01:linuxgeneric:core' > /etc/oxidized/router.db
chown oxidized:oxidized /etc/oxidized/router.db /etc/oxidized/config
systemctl restart oxidized
sleep 12
curl -s http://127.0.0.1:8888/nodes.json | python3 -c 'import json,sys; d=json.load(sys.stdin)[0]; print("group:",d["group"],"status:",d["status"])'
实测回显:
group: core status: success
还原(清单去掉第三列、映射删掉 group: 2、groups: {} 复原):
echo 'sw01:linuxgeneric' > /etc/oxidized/router.db
systemctl restart oxidized
sleep 10
curl -s http://127.0.0.1:8888/nodes.json | python3 -c 'import json,sys; d=json.load(sys.stdin)[0]; print("baseline:",d["group"],d["status"])'
实测回显:
baseline: default success
💡 说明:分组的价值在组合拳——
groups.core.vars可给整组传专用凭据变量,/nodes/group/<组名>.jsonAPI 可按组查询,output.git.repo支持按组拆分仓库(5.5)。
5.4 输入参数(input.*)
input:
default: ssh, telnet
debug: false
ssh:
secure: false
ftp:
passive: true
utf8_encoded: true
default: ssh, telnet:按顺序尝试的登录方式,SSH 失败自动降级 Telnet(老设备场景);debug: false:输入会话调试(可设为字符串指定会话日志文件),排障登录问题时开;ssh.secure: false:是否严格校验主机密钥变更(内网设备换件频繁时保持 false,严要求环境设 true 并纳管 known_hosts);ftp.passive: true:FTP 被动模式(个别老机型走 FTP 取配置时用);utf8_encoded: true:会话内容按 UTF-8 解码(中文设备名/横幅场景保持 true)。
本组参数的默认值即生产可用值(实测模板原文),无需改动即可工作;仅在做输入层排障时临时打开 input.debug。
5.5 输出参数(output.file / output.git)
file 输出(默认):每设备一个纯文本文件,简单直观。
output:
default: file
file:
directory: "/etc/oxidized/configs"
实测产物:
ls -la /etc/oxidized/configs/
total 12
drwxr-xr-x 2 oxidized oxidized 4096 Oct 22 09:17 .
drwxr-xr-x 4 oxidized oxidized 4096 Oct 22 09:17 ..
-rw-r--r-- 1 oxidized oxidized 3355 Oct 22 09:17 sw01
git 输出(生产推荐):每次变更自动 commit,自带版本历史与差异对比,REST API 的版本/差异端点依赖它。需要先 gem install rugged:
output:
default: git
git:
user: Oxidized
email: oxidized@example.com
repo: "/etc/oxidized/oxidized.git"
切换后重启,首次抓取会初始化裸仓库并提交。验证 git 仓库与提交历史:
git --git-dir=/etc/oxidized/oxidized.git log --format='%h %an %ad %s' --date=iso | head -3
实测回显:
d247c3f Oxidized 2026-10-22 09:23:43 +0000 update /sw01
c3107e4 Oxidized 2026-10-22 09:23:09 +0000 update /sw01
解读:两次提交对应设备侧两次配置变更(update /sw01),提交人即 output.git.user/email。切回 file 输出(还原动作):
sed -i 's/^ default: git$/ default: file/' /etc/oxidized/config
systemctl restart oxidized
sleep 10
curl -s http://127.0.0.1:8888/nodes.json | python3 -c 'import json,sys; print("final:", json.load(sys.stdin)[0]["status"])'
实测回显:
final: success
💡 技术拓展:
output.git.repo支持两种形态——单一仓库(如上)或按分组分仓:repo: {core: "/var/lib/oxidized/core.git", access: "/var/lib/oxidized/access.git"},组内设备进对应仓库,适合按机房隔离权限。git 输出还支持type_as_directory(把 secret 等特殊类型配置分目录存放)与 hook 联动推送远端(docs/Hooks.md 的 githubrepo)。
5.6 数据源参数(source.csv / source.sql)
CSV 源(默认):一行一台设备的平面清单,默认文件 /etc/oxidized/router.db、冒号分隔、第 0 列 name、第 1 列 model:
source:
default: csv
csv:
file: "/etc/oxidized/router.db"
delimiter: !ruby/regexp /:/
map:
name: 0
model: 1
实测清单与节点加载日志:
cat /etc/oxidized/router.db
sw01:linuxgeneric
2026-10-22 09:21:05.107395 I [8751:1380] Oxidized::Nodes -- Loaded 1 nodes
map 可按列位置映射任意节点属性(name/model/group/username/password/input/…),vars_map 则把列映射进节点 vars(如第 3 列作为 enable 密码:vars_map: {enable: 3});gpg: false 表示清单未加密(设 true 需装 gpgme gem 读 GPG 加密清单)。
SQL 源:设备清单存数据库,适合与 NetBox/CMDB 同步的场景。默认适配 SQLite(adapter: sqlite),需 gem install sequel sqlite3:
sqlite3 /etc/oxidized/nodes.db "CREATE TABLE devices (name TEXT PRIMARY KEY, rancid TEXT, ip TEXT, username TEXT, password TEXT); INSERT INTO devices VALUES ('sw01','linuxgeneric','10.89.58.20','admin','q1w2e3r4'); SELECT * FROM devices;"
chown oxidized:oxidized /etc/oxidized/nodes.db
实测回显:
sw01|linuxgeneric|10.89.58.20|admin|q1w2e3r4
把 source.default 从 csv 切到 sql 并声明映射(列名 → 节点属性):
source:
default: sql
sql:
adapter: sqlite
database: "/etc/oxidized/nodes.db"
table: devices
map:
name: name
model: rancid
username: username
password: password
重启后验证(加载成功且完成抓取):
systemctl restart oxidized
sleep 14
journalctl -u oxidized -o cat --no-pager -n 5 | grep -E 'Loaded'
curl -s http://127.0.0.1:8888/nodes.json | python3 -c 'import json,sys; d=json.load(sys.stdin)[0]; print("model:",d["model"],"status:",d["status"])'
实测回显:
2026-10-22 09:25:38.330830 I [11113:1380] Oxidized::Nodes -- Loaded 1 nodes
model: LinuxGeneric status: success
还原为 CSV 源并确认基线:
sed -i 's/^ default: sql$/ default: csv/' /etc/oxidized/config
systemctl restart oxidized
sleep 12
journalctl -u oxidized -o cat --no-pager -n 60 | grep 'Loaded' | tail -1
实测回显:
2026-10-22 09:25:52.309847 I [11131:1380] Oxidized::Nodes -- Loaded 1 nodes
💡 说明:SQL 源的
map.model: rancid是惯例命名——表列名沿用 RANCID 时代的rancid列存放机型名(0.37.0 源码source/sql.rb的默认映射即如此)。adapter还支持 mysql2/postgres(装对应驱动 gem),query键可写自定义 SQL 过滤节点子集。
5.7 Web 扩展(extensions.oxidized-web)
extensions:
oxidized-web:
load: true
listen: 0.0.0.0
port: 8888
load:是否加载 Web/API 扩展(需已安装 oxidized-web gem);listen:监听地址(默认127.0.0.1,只本机访问;对外提供需改0.0.0.0并做好访问控制);port:监听端口(默认 8888);- 其余可选:
url_prefix(反代子路径)、vhosts(Host 头白名单)、hide_node_vars(API 响应中隐藏敏感节点变量名列表)。
实测:弃用参数告警。 0.37.0 中旧写法 rest: 0.0.0.0:8888 仍兼容但已弃用,启动日志会明确提示:
2026-10-22 09:16:54.861606 W [6523:1400] Oxidized::Core -- configuration: "rest" is deprecated. Migrate to "extensions.oxidized-web" and remove "rest" from the configuration
迁移到上表写法后重启,告警消失(实测日志仅剩加载与监听行):
2026-10-22 09:18:56.729768 I [6583:2260] Oxidized::API::Web -- Oxidized-web server listening on 0.0.0.0:8888
5.8 运行时杂项(pid / crash / stats.history_size / debug)
pid: "/etc/oxidized/pid":PID 文件。实测与 systemd 主进程一一对应:
cat /etc/oxidized/pid
systemctl show -p MainPID --value oxidized
实测回显(两命令输出一致,均为 11316):
11316
11316
crash.directory: "/etc/oxidized/crashes":进程崩溃时转储文件目录(crash.hostnames: false决定转储文件名是否含主机名);stats.history_size: 10:每节点保留最近 10 次抓取统计(/nodes/stats.json可查);debug: true:全局调试日志(量大,仅排障临时开启),等价命令行oxidized -d。
六、生产配置模板
适用场景:几百台规模的混合厂商网络、8 GB 内存以上的独立备份服务器、按机房分组、Git 版本化输出 + SQLite 清单(示意;CSV 清单去掉 source.sql 段即可)。以下模板中的所有键值均为 0.37.0 合法键(本文各节已逐项实测):
---
username: admin
password: q1w2e3r4
model: ios # 清单未写机型时的兜底;多厂商环境建议每行清单显式写 model
resolve_dns: true
interval: 3600 # 生产建议 3600;合规要求高的核心网可降到 900
debug: false
threads: 30 # 设备超过 600 台可加到 50 并配合 use_max_threads: false
use_max_threads: false
timeout: 20
timelimit: 300
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
next_adds_job: false
vars: {}
groups: # 按机房/厂商分组管理
core: {}
access: {}
group_map: {}
models: {}
pid: "/etc/oxidized/pid"
extensions:
oxidized-web:
load: true
listen: 0.0.0.0 # 若仅本机反代访问,改回 127.0.0.1
port: 8888
crash:
directory: "/etc/oxidized/crashes"
hostnames: false
stats:
history_size: 10
input:
default: ssh, telnet
debug: false
ssh:
secure: false
ftp:
passive: true
utf8_encoded: true
output:
default: git
git:
user: Oxidized
email: oxidized@example.com
repo: "/etc/oxidized/oxidized.git"
file:
directory: "/etc/oxidized/configs" # 保留 file 段便于临时切回
source:
default: csv
csv:
file: "/etc/oxidized/router.db"
delimiter: !ruby/regexp /:/
map:
name: 0
model: 1
group: 2
username: 3
password: 4
sql:
adapter: sqlite
database: "/etc/oxidized/nodes.db"
table: devices
map:
name: name
model: rancid
model_map:
juniper: junos
cisco: ios
模板解读:output 同时保留 git 与 file 两段,切换后端只改 default: 一行;source 同理保留 csv/sql 双段(磁盘充足时 file+git 双开仅占双份存储,风险更低)。
七、常见问题(FAQ)
Q1:改了 config 为什么不生效?
全局配置只在进程启动时加载。systemctl restart oxidized 后生效;REST API /reload 只重载节点清单(实测 5.1 节)。
Q2:启动报 configuration: "rest" is deprecated?
旧 Web 参数写法,按 5.7 迁移到 extensions.oxidized-web 即可。
Q3:启用 git 输出报 rugged not found?
gem install rugged --no-document 后重启服务(rugged 编译需 cmake/libssl-dev,见安装指南依赖清单)。
Q4:启用 SQL 源报 sequel not found?
gem install sequel sqlite3 --no-document(SQLite 场景),MySQL/PG 换对应驱动 gem 并改 adapter。
Q5:节点一直 no_connection?
三查:凭据是否正确(看日志 AuthenticationFailed)、机型是否匹配(PromptUndetect 说明模型认不出提示符)、网络/ACL 是否放行 SSH/Telnet。定位顺序:journalctl -u oxidized | grep raised → 5.1 实测的两类报错。
Q6:Configuration updated 很久不出现?
该日志只在配置变化时打印。设备没改配置就是不会出现,属正常;验证周期可用 5.2 的变更触发法。
Q7:/etc/oxidized/config 里的正则报 YAML 错误?
正则必须带 !ruby/regexp 标签(如 delimiter: !ruby/regexp /:/),否则按字符串解析导致源/提示符失效。
八、参考链接
- 官方 Configuration 文档:https://github.com/ytti/oxidized/blob/main/docs/Configuration.md (0.37.0 源码 docs/ 内含同文件)
- 配置默认值定义源码:https://github.com/ytti/oxidized/blob/main/lib/oxidized/config.rb (0.37.0)
- Sources/Outputs 官方文档:https://github.com/ytti/oxidized/blob/main/docs/Sources.md 、https://github.com/ytti/oxidized/blob/main/docs/Outputs.md (0.37.0)
- 本专栏相关篇目:《Oxidized 0.37.0 介绍与选型指南》(https://www.quzuo.net/document/nzEHSUbDqEuW )、《Ubuntu 22.04 安装 Oxidized 指南》(https://www.quzuo.net/document/NcutoU8bDsiu )、《Oxidized 0.37.0 常用 CLI 命令详解》