跳到正文
全部 31 篇FREN中文
目录
第 5 部分 · 第 5 篇,共 5 篇 难度:进阶 阅读时间:12 分钟 适用平台:Linux

维护与更新

一台长期开机的机器需要在时间的流逝中保持整洁。操作系统、依赖、工具、智能体:哪些可以自动化,哪些需要手动更新,以及如何做到不弄坏任何东西。

本文目录
  1. 01操作系统:底层系统
  2. 02依赖:您的项目所依靠的东西
  3. 03工具与智能体
  4. 04磁盘空间:无声的陷阱
  5. 05知道它什么时候坏了
  6. 06让智能体来帮您
  7. 07常见问题

要点速览

一台常年开着的机器,靠两个习惯保持健康:安全补丁自动安装(unattended-upgrades);每月一次先备份,运行 sudo apt update && sudo apt upgrade,逐个更新 Ollama、agent 和依赖,再清理磁盘。从 Ubuntu 24.04 升级到 26.04 用 sudo do-release-upgrade,事先备份,并留意新的 Rust 版基础工具(rust-coreutils、sudo-rs)以及 Python 升到 3.14。要及时知道哪里坏了:传递退出码,给服务挂上 OnFailure,并真正测试一次告警。

请先完成: 必备的系统设置Git、GitHub 与备份

一台 24 小时不间断运行、并且可以从外部访问的机器永远不会真正「完工」。它是活的,而正如一切有生命的事物一样,它需要一点点照料。好消息是:90% 的工作可以归结为两个习惯,一个自动完成,一个每月一次。我们来看看是哪两个,尤其是如何在更新时不弄坏任何东西。

操作系统:底层系统

您的 Ubuntu 是地基。维护分为两个层次:

# 日常动作:刷新软件包列表,然后安装更新
sudo apt update && sudo apt upgrade -y
# 清理掉那些已经没用的软件包
sudo apt autoremove --purge

至于安全,您已经在系统设置里用 unattended-upgrades 把一切都自动化好了:机器会自行应用关键修复。这就是我们刚才说的那个自动习惯。

每两年一次,Ubuntu 会发布一个新的 LTS 版本。最新的 Ubuntu 26.04 于 2026 年 4 月发布;从 24.04 升级的通道自它的首个修正版 26.04.1(8 月底发布)起开放:Canonical 总是等到这个「.1」之后,才提供 LTS 之间的升级。这并不紧急,24.04 的安全补丁会持续到 2029 年。等您决定动手时,先做好备份(参见 Git、GitHub 与备份),再浏览一遍版本说明(英文)。

# 先装完待处理的更新,如有提示就重启
sudo apt update && sudo apt full-upgrade -y
# 然后开始升级到下一个 LTS(如果是通过 SSH 操作,请在 tmux 里运行)
sudo do-release-upgrade

依赖:您的项目所依靠的东西

这正是意外藏身之处,因为一个升了大版本的依赖可能会弄坏一个项目。

  • Node(通过 nvm):nvm install --lts 安装最新的 LTS(截至 2026 年 10 月 1 日为 Node 24,Node 26 预计 10 月 28 日成为 LTS),nvm alias default 把它设为默认。先保留旧版本,等确认您的项目都能正常运行之后再说。
  • 某个项目的软件包:npm outdated 会显示哪些落后了,npm update 会在您的 package.json 限定的范围内更新。对于大版本,请先读一读 changelog:破坏性变更正是发生在这里。
  • 能救命的习惯:锁文件。 把您的 package-lock.json / requirements.txt 纳入版本管理。它们能保证您的项目在任何地方都重新安装完全相同的版本,不会在您背后悄悄变动。

工具与智能体

您技术栈里的其余部分都能干净地更新,各有各的方式:

  • Docker:跟随系统的 apt 更新。记得清理那些堆积起来的东西(见下文)。
  • Ollama:重新运行安装脚本即可升到最新版(curl -fsSL https://ollama.com/install.sh | sh)。至于模型,用 ollama pull <模型> 就能取到新的版本:本地版本会被替换。想知道哪些新模型值得更新,可以看每周更新的 Quelle IA 本地模型榜(法语网站)。
  • 您的代码智能体:用安装脚本装的 Claude Code 会在后台自动更新,claude update 可以强制升到最新版。OpenCode 用 opencode upgrade 升级。如果您当初是用 npm 装的 Claude Code,请改用原生安装脚本(curl -fsSL https://claude.ai/install.sh | bash),再用 npm uninstall -g @anthropic-ai/claude-code 删掉旧的那份。一个最新的智能体,意味着免费到手的新能力。
  • Tailscale 和 cloudflared:通过它们各自的软件源安装,会随系统一起更新。无需做任何特别的事。

磁盘空间:无声的陷阱

模型、Docker 镜像和旧软件包会在不知不觉中把磁盘填满,而一台塞满的机器会开始莫名其妙地崩溃。打扫只需三条命令:

df -h                      # 还剩多少空间
docker system prune -a     # 清除未使用的镜像和容器
ollama rm <模型>           # 删除一个您不再使用的模型
sudo apt autoremove --purge # 孤立的软件包

知道它什么时候坏了

一台整夜独自干活的机器,只有您事先安排过,它才会通知您。风险不在于故障本身,而在于消息传到您这儿要多久。下面这些全都来自这台机器上的真实事故。

1. 一个脚本调用另一个脚本,必须把退出码传下去

经典陷阱,而且非常常见:

#!/bin/bash
set -uo pipefail
python3 import.py >> import.log 2>&1        # 退出码被扔进了垃圾桶
systemctl --user restart my-site || true    # 最后一条命令:永远返回 0

这个脚本永远返回 0。导入可以崩掉,systemd 报告成功,而您的周报告诉您一切正常。这里就发生过:一个数据库空了一整天,而探针一直显示绿色。

修法只要两行:

python3 import.py >> import.log 2>&1
rc=$?
systemctl --user restart my-site || true
exit $rc

2. OnFailure:它倒下的那一秒就通知您

systemd 可以在一个单元失败时触发另一个单元。您写一个给自己发消息的小服务,然后把它挂到所有重要的单元上。

# ~/.config/systemd/user/my-service.service.d/onfailure.conf
[Unit]
OnFailure=alert@%n.service

请用 .d/ 目录里的覆盖文件,而不是直接改单元本身:这样即使单元是从代码仓库软链过来的也照样生效,而且要撤销只需删掉一个文件夹。

3. 一个系统级探针,因为任何单元告警都看不见机器正在下沉

内存被填满时,没有任何单元处于”失败”状态。下沉的是机器本身,OnFailure 什么都看不到。您需要一个独立的、跑在定时器上的探针,盯着可用内存、被内核杀掉的进程、swap 和负载,然后在状态发生变化时给您发消息,免得同一条告警每五分钟重复一遍。

让智能体来帮您

这正是您的智能体最喜欢的那种苦差事。「检查一下这台机器上有什么需要更新的,给我总结一下重要的变更,并提出一个方案」:它会列出落后的软件包,替您读完 changelog,然后建议您一步一步地行动。您的手指始终按在按钮上,调查的活儿由它来干。

常见问题

需要马上从 Ubuntu 24.04 升级到 26.04 吗?

不必着急:24.04 的安全补丁会一直提供到 2029 年。从 26.04.1(2026 年 8 月底发布)起才开放升级,因为 Canonical 总会等到这第一个修正版本,才开放从一个 LTS 到下一个 LTS 的升级。等您决定动手时,请先备份,并浏览一遍发行说明。

为什么有些 Ubuntu 更新之后需要重启?

有些更新,尤其是 Linux 内核,只有重启之后才会生效。需要重启时,Ubuntu 会通过 /var/run/reboot-required 这个文件提醒您。请挑一个空闲的时段重启:如果网站、隧道和 agent 都以 systemd 服务的方式安装,它们会自动重新启动。

如何更新 Claude Code 和 OpenCode?

用安装脚本装好的 Claude Code 会在后台自动更新,claude update 可以强制升到最新版本。OpenCode 用 opencode upgrade 升到最新版本。如果您当初是用 npm 安装的 Claude Code,请改用原生安装程序,然后用 npm uninstall -g @anthropic-ai/claude-code 删除旧的那份。

运行本地模型的机器,怎样腾出磁盘空间?

模型、Docker 镜像和旧软件包会悄无声息地把磁盘塞满,而磁盘满了的机器会莫名其妙地出故障。先用 df -h 查看剩余空间,再动手清理:docker system prune -a 清掉没在用的镜像和容器,ollama rm 删除不再使用的模型,sudo apt autoremove --purge 清除孤立的软件包。

为什么只看 systemctl --failed 不足以监控定时任务?

这条命令只显示当下这一刻。一个每日任务周一出错、周二又恢复正常,在您周日看报告之前早已从列表里消失,报告会写着「没有失败项」。请把两种机制结合起来:OnFailure 抓住转红的那一刻,定期报告抓住已经持续存在的故障。

本文涉及的术语: UbuntuDockerOllama智能体Claude CodeOpenCodeTailscaleCloudflare TunnelDocker 镜像仓库(repo)RAM(内存)

发现错误?

命令失效了,价格变了?

这些工具每个月都在变。请告诉我这篇文章哪里不对,我会改正并更新日期。

只保留页面、您的留言和选填的联系方式,别无其他。

第 31 / 31 篇 · 第 5 部分 还没有读过任何一篇 打开文章目录