2026年7月

一、解决系统yum源的问题

CentOS 7 已于 2024 年 6 月 30 日正式停止维护(EOL)。

CentOS 官方随后关闭了 mirrorlist.centos.org 镜像列表服务器。目前系统中的默认 .repo 配置文件(包含基础源、SCL 扩展源等)因无法连接到官方镜像列表而直接抛出 502 Bad Gateway 错误。

🛠️ 解决方案
要解决此问题,需要将系统的 YUM 源全部替换为归档源(CentOS Vault Mirror)。请在终端中按顺序执行以下命令:

  1. 备份现有的 repo 配置文件
    Bash
    sudo mkdir -p /etc/yum.repos.d/backup
    sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
  2. 重新下载并配置 Vault 镜像源
    方案 A:国内服务器(推荐,速度更快)
    直接使用阿里云的 CentOS 7 归档镜像源(同时修复基础源与截图报错的 SCLo 源):

Bash

1. 下载基础源 CentOS-Base.repo

sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

2. 将基础源中的路径调整为 vault 归档路径

sudo sed -i -e 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo
sudo sed -i -e 's/mirrors.aliyun.com/centos/mirrors.aliyun.com/centos-vault/g' /etc/yum.repos.d/CentOS-Base.repo

3. 下载并修复 SCLo 源(彻底消除 centos-sclo-rh 报错)

sudo curl -o /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo https://mirrors.aliyun.com/repo/Centos-7-SCLo-rh.repo
sudo curl -o /etc/yum.repos.d/CentOS-SCLo-scl.repo https://mirrors.aliyun.com/repo/Centos-7-SCLo-scl.repo
sudo sed -i 's/mirrors.aliyun.com/centos/mirrors.aliyun.com/centos-vault/g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
sudo sed -i 's/mirrors.aliyun.com/centos/mirrors.aliyun.com/centos-vault/g' /etc/yum.

这里会报错,按下面修改

报错信息 File contains no section headers 并且文件第一行为 '<!DOCTYPE html>\n',说明上一步在使用 curl 下载 .repo 配置文件时,请求的 URL 链接返回了一个 404 网页或错误页面。

curl 将返回的 HTML 网页源码保存成了 .repo 文件,而 yum 无法在 HTML 代码中识别出形如 [repo-id] 的配置节点标题,因此抛出了格式异常。

解决方法
直接删除该损坏的文件,并手动将正确的 SCL 归档源配置写入文件中:

  1. 删除损坏的 .repo 文件
    Bash
    sudo rm -f /etc/yum.repos.d/CentOS-SCLo-scl*.repo
  2. 直接生成正确的 SCL 镜像源配置文件
    复制以下命令在终端中运行,直接写入包含正确的 Vault 归档路径配置:

Bash

写入 CentOS-SCLo-scl-rh.repo

sudo cat << 'EOF' > /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/sclo/x86_64/rh/
gpgcheck=0
enabled=1
EOF

写入 CentOS-SCLo-scl.repo

sudo cat << 'EOF' > /etc/yum.repos.d/CentOS-SCLo-scl.repo
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/sclo/x86_64/sclo/
gpgcheck=0
enabled=1
EOF

还会报错,按下面修改

YUM 配置文件中的变量 $releasever 在 CentOS 7 下会自动替换为数字 7。但在阿里云镜像站的 centos-vault(归档库)中,CentOS 7 的实际目录名称是具体的终极版本号 7.9.2009,并没有 /centos-vault/7/ 这个路径,因此服务器直接返回了 404 Not Found。

🛠️ 解决方案
直接跳过变量替换,将 CentOS-Base.repo 中的路径硬编码指定为归档路径 7.9.2009。

  1. 重新写入正确的 CentOS 基础归档源
    请在终端中复制并运行以下命令,覆盖 /etc/yum.repos.d/CentOS-Base.repo:

Bash
sudo cat << 'EOF' > /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-7.9.2009 - Base
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[updates]
name=CentOS-7.9.2009 - Updates
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[extras]
name=CentOS-7.9.2009 - Extras
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[centosplus]
name=CentOS-7.9.2009 - Plus
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF

  1. 修复 EPEL 扩展源(从截图看系统启用了 EPEL)
    EPEL 7 同样已经进入 EOL 归档状态,如果不更新 EPEL 配置,后续也会触发 404。运行以下命令更新 EPEL 归档源:

Bash
sudo cat << 'EOF' > /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.aliyun.com/epel-archive/7/$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
EOF

  1. 清理并重构 YUM 缓存
    执行以下命令,完成缓存刷新:

Bash
sudo yum clean all
sudo yum makecache
提示 Metadata Cache Created 后,YUM 源即恢复正常使用。

二、安装python3

通过 EPEL 或 SCL 源快速安装(省时省力)
如果对 Python 版本没有极高要求,可以通过包管理器直接安装官方编译好的软件包。

方式 A:通过 EPEL 源安装 Python 3.6
Bash

1. 安装 EPEL 源

sudo yum install -y epel-release

2. 安装 Python 3 和 pip

sudo yum install -y python3 python3-pip

3. 验证

python3 --version

通过该方法安装的python的卸载方法

如果是通过 EPEL 源安装的 Python 3.6(yum install python3 python3-pip),卸载方式如下(适用于 CentOS/RHEL 7 系列等):

  1. 查看当前安装的 Python 包

先确认包名:

rpm -qa | grep python3

通常会看到类似:

python3-3.6.xxxxx.el7.x86_64
python3-libs-3.6.xxxxx.el7.x86_64
python3-pip-9.xxxxx.el7.noarch
python3-setuptools-...

  1. 卸载 Python 3 和 pip

执行:

sudo yum remove -y python3 python3-pip

如果提示依赖关系,也可以直接卸载相关包:

sudo yum remove -y python3*

  1. 删除 EPEL 源(如果不再需要)

卸载 EPEL:

sudo yum remove -y epel-release

或者:

sudo rpm -e epel-release

  1. 清理缓存
    sudo yum clean all
  2. 验证卸载

检查:

python3 --version

正常应该显示:

-bash: python3: command not found

检查 pip:

pip3 --version

应该也是:

-bash: pip3: command not found
注意

如果这是 CentOS 7 系统自带环境,不要删除:

python

因为 CentOS 7 的系统工具(如 yum)依赖 Python 2.7。

不要执行:

yum remove python

否则可能导致 yum 损坏。

如果你的目标是清理旧 Python 3.6,然后安装 Python 3.9/3.10/3.11,建议只卸载 python3 和 python3-pip,保留 EPEL 源。

方式 B:通过 SCL (Software Collections) 安装更高版本(如 Python 3.8)
SCL 允许在不破坏系统原有环境的前提下使用新版软件:

Bash

1. 安装 SCL 源

sudo yum install -y centos-release-scl

2. 安装 Python 3.8

sudo yum install -y rh-python38

3. 启用 Python 3.8 环境(仅在当前 Shell 终端生效)

scl enable rh-python38 bash

4. 验证

python --version

通过该方法安装的python的卸载

如果是通过 SCL(Software Collections)安装的 Python 3.8(rh-python38),卸载方式如下。

适用于 CentOS 7 / RHEL 7 使用 centos-release-scl 或 SCL 仓库的情况。

  1. 查看已安装的 SCL Python 包

先确认安装情况:

rpm -qa | grep rh-python38

一般会看到:

rh-python38-3.8.xxxxx.el7.x86_64
rh-python38-python-3.8.xxxxx.el7.x86_64
rh-python38-python-libs-...
rh-python38-python-pip-...
rh-python38-python-setuptools-...

  1. 卸载 Python 3.8

执行:

sudo yum remove -y rh-python38*

或者:

sudo yum erase -y rh-python38*

这会删除:

Python 3.8 主程序
pip
setuptools
标准库
相关依赖包

  1. 卸载 SCL 仓库(可选)

如果以后不再使用 SCL:

sudo yum remove -y centos-release-scl

如果安装了 SCL-utils:

sudo yum remove -y scl-utils

  1. 清理 yum 缓存
    sudo yum clean all
  2. 删除用户环境配置(如果配置过)

如果之前执行过:

scl enable rh-python38 bash

它只影响当前 Shell,不会永久生效。

但如果你添加过:

source /opt/rh/rh-python38/enable

例如在:

~/.bashrc
~/.bash_profile
/etc/profile

里面,需要删除:

source /opt/rh/rh-python38/enable

然后重新加载:

source ~/.bashrc

  1. 验证卸载

检查:

python --version

如果系统没有其他 Python:

-bash: python: command not found

检查:

scl -l

正常不会再显示:

rh-python38
注意事项

不要删除系统 Python:

python-2.7

CentOS 7 的:

yum
firewalld
系统管理脚本

依赖 Python 2.7。

不要执行:

yum remove python

否则可能导致 yum 无法使用。

如果你的目标是彻底清理所有第三方 Python(EPEL Python3 + SCL Python3.8)并恢复 CentOS 默认 Python 环境,可以执行:

sudo yum remove -y python3* rh-python38*
sudo yum remove -y centos-release-scl epel-release
sudo yum clean all

然后确认:

python --version
yum --version

都正常即可。

最佳实践建议

统一使用 python3 和 pip3 命令:在编写脚本、运行程序或安装第三方包时,显式指定 python3 script.py 或 pip3 install ,杜绝使用 python 混淆版本。

使用虚拟环境(Virtualenv):为具体的 Python 项目创建独立的环境,避免污染全局环境:

Bash
python3 -m venv my_env
source my_env/bin/activate
🚑 补充救急:如果误改 /usr/bin/python 导致 yum 报错怎么办?
如果你此前不小心替换了系统的 /usr/bin/python 软链接,导致运行 yum 时出现类似 SyntaxError: invalid syntax 的报错,请按以下步骤修复:

将软链接重新指回 Python 2.7:

Bash
sudo ln -sf /usr/bin/python2.7 /usr/bin/python
如果修改了配置文件,可以手动修正 yum 的解释器路径:
修改 /usr/bin/yum 和 /usr/libexec/urlgrabber-ext-down 文件的第一行,确保第一行为:

Bash

!/usr/bin/python2.7

分两大系统:Windows(你本机) 和 Linux(你的OpenClaw服务器),分开命令,你对照自己环境执行。

一、如果你是 Windows(脚本注册成 Windows 服务)

两种常见方式:sc 创建服务 / nssm 注册脚本服务

方式1:列出全部系统服务(图形界面)

1. Win+R 输入: services.msc  回车
滚动查找,但是名字多,不方便搜索。

方式2:PowerShell(管理员打开,推荐!精准检索)

  1. 列出所有服务名称+显示名称

powershell

Get-Service | Select-Object Name,DisplayName | Sort-Object DisplayName
 

  1. 关键词搜索(比如脚本包含 script、run、task 等关键词,改成你的关键词)

powershell

Get-Service | Where-Object {$_.DisplayName -match "script"}
 

找到服务名之后操作

假设服务名称: MyScriptService 

1. 停止服务

powershell

Stop-Service -Name MyScriptService
 

2. 删除/卸载服务(管理员权限)

powershell

sc delete MyScriptService
 

重要:NSSM注册的脚本服务,也是用这条  sc delete  删除。

二、如果你是 Linux 系统(大概率你的 OpenClaw 服务器)

Linux 现在绝大多数是 systemd(主流:Ubuntu、Debian、CentOS、Rocky)

1、查看所有 systemd 服务

bash

systemctl list-unit-files --type=service
 

2、只查看正在运行的服务

bash

systemctl list-units --type=service --state=running
 

3、模糊搜索(最强推荐!搜索关键字,替换关键词)

bash

systemctl list-unit-files --type=service | grep script
 

找到服务名(例如  mytask.service )完整卸载流程

bash

1.停止服务

systemctl stop mytask.service

2.设置开机不启动

systemctl disable mytask.service

3.删除服务文件(真正卸载)

rm -f /etc/systemd/system/mytask.service

4.重载systemd配置

systemctl daemon-reload
 

补充:老式 SysVinit(极少)

bash

service --status-all
 

三、关键区分一个坑

1. systemd 服务文件路径一般在: /etc/systemd/system/ 
你自己手动写脚本注册的服务基本都在这里,可以直接ls浏览全部文件:

bash

ls /etc/systemd/system/*.service
 

直接看文件名,肉眼寻找你自建的脚本服务,找不到再用上面检索命令。

快速自查建议(推荐操作顺序)

Windows:

管理员PowerShell执行

powershell

Get-Service | Select Name,DisplayName > services-list.txt
 

会在当前目录生成文本文件,打开慢慢搜索关键词。

Linux服务器:

直接执行

bash

ls /etc/systemd/system/*.service
 

浏览所有自建服务文件,一眼找到你当年创建的service。

额外提醒

如果你当时只是写定时任务(crontab)不是注册系统服务,上面命令看不到!
Linux查看定时任务:

bash

crontab -l
 

你可以告诉我:系统是 Windows 还是 Linux,我给你一条直接复制就能检索的完整命令。

一、openclaw配置文件优化

"models": {

"mode": "merge",
"providers": {
  "ollama": {
    "baseUrl": "http://192.168.222.162:11434",
    "apiKey": "OLLAMA_API_KEY",
    "api": "ollama",
    "timeoutSeconds": 600,#此处为添加内容,ollama单次推理超时时间
    "models": [
      {
        "id": "gemma4",
        "name": "gemma4",
        "reasoning": false,
        "input": [
          "text"
        ],
        "cost": {
          "input": 0,
          "output": 0,
          "cacheRead": 0,
          "cacheWrite": 0
        },
        "contextWindow": 128000,
        "maxTokens": 8192,
        "params": {  #params这里是后加的,所有发给ollama的设置都可以在这里添加
          "num_ctx": 65536, #上下文长度,不用管模型的上下文,这里设置为64k优先级最高
          "num_predict": 8192, #单次输出文本长度 ,不能设置为1024或2048太小模型不输出
          *"num_parallel": 1,  #并行推理数,不能用删掉
          "keep_alive": "20s"  #保证模型常驻内存,不能用删掉*
          "think": false #关闭大模型的思考过程,节省上下文
        },
        "compat": {
          "supportsTools": true,
          "supportsUsageInStreaming": true
        }
      },

二、ollama运行服务器优化

一、显存占用实测(Qwen3-VL 8B 多模态,比普通纯文本8B吃显存多很多)

VL多模态额外带图像编码器ViT,会多占用2~4GB显存:

1. q4_K_M(最轻量)
模型权重≈5.5GB + 图像编码缓存2~3GB + KV上下文缓存
单图短对话峰值:9~10GB
多图+长上下文:直接冲到12~13GB,OOM崩溃

2. q5_K_M(均衡质量)
权重≈5.9GB,峰值轻松11~13GB,12G卡风险极高

3. q6_K / q8_0 直接放弃,加载就爆显存

你的显卡还要预留1GB给系统、Docker、桌面渲染,可用显存≈11GB上限。

  • 只单张图片、简短问答:q4_K_M 勉强能跑;
  • 多轮对话、多张图片、读取Obsidian长文档、连续调用Linux工具:显存直接打满,Ollama进程被杀,OpenClaw任务中断。

二、你128G大内存能起到什么缓解作用?

Ollama支持KV缓存溢出到系统内存,能小幅降低显存峰值,但图像编码器必须放在显存,无法丢内存,这是核心瓶颈:

1. 开启KV缓存量化  OLLAMA_KV_CACHE_TYPE=q4_0 ,缓存显存减半;

2. 超长上下文时,KV缓存溢出128G内存,不会立刻OOM;

3. 缺陷:图片处理阶段显存瞬间冲高,内存兜底救不了图像编码器的显存占用。

你的128G超大内存能起到什么缓冲作用?

Ollama支持KV缓存溢出到系统内存,缓解显存压力,但有局限:

1. KV缓存放不下时自动丢到128G内存,不会立刻OOM;

2. 模型权重必须全部放显存,不能丢内存,权重本身占用是刚性开销;

3. 内存交换会大幅降低推理速度,模型思考卡顿,更容易触发OpenClaw空闲超时断开任务。