当前位置: 首页 > news >正文

[架构之美]linux常见故障问题解决方案(十九)

[架构之美]linux下常见故障问题解决方案

一,文本文件忙

问题一:root@wh-VMware-Virtual-Platform:/home/hail# cp /root/containerd/bin/* /usr/bin/
cp: 无法创建普通文件 ‘/usr/bin/containerd’: 文本文件忙

在Linux系统中遇到“文本文件忙”错误时,通常是因为目标文件正在被进程占用。以下是分步解决方案:

现象截图:

在这里插入图片描述

1.1 问题原因分析

错误 cp: 无法创建普通文件 '/usr/bin/containerd': 文本文件忙 表明:

  • 目标文件 /usr/bin/containerd 正在被系统进程占用。
  • 该文件可能属于正在运行的容器运行时服务(如 containerddocker)。

1.2 解决方案步骤

1. 确认占用文件的进程

使用 lsoffuser 命令查找正在使用文件的进程:

sudo lsof /usr/bin/containerd
# 或
sudo fuser -v /usr/bin/containerd
2. 停止相关服务

停止正在使用 containerd 的服务(按顺序操作):

# 停止 Docker(如果使用)
sudo systemctl stop docker# 停止 Containerd
sudo systemctl stop containerd# 确保进程终止(强制清理)
sudo pkill -9 containerd
3. 复制文件

确认服务停止后,重新执行复制命令:

sudo cp /root/containerd/bin/* /usr/bin/
4. 重启服务

复制完成后恢复服务:

sudo systemctl start containerd
sudo systemctl start docker  # 如果之前停止了 Docker

1.3 附加说明

  • 内核锁定问题:某些情况下,即使服务已停止,内核仍可能锁定文件。此时可重启系统或使用 cp --remove-destination 覆盖:
    sudo cp --remove-destination /root/containerd/bin/* /usr/bin/
    
  • 安全模式操作:如果仍无法替换,可尝试进入单用户模式或使用 LiveCD 环境操作。

1.4 命令总结

# 1. 检查进程占用
sudo lsof /usr/bin/containerd# 2. 停止服务
sudo systemctl stop docker containerd
sudo pkill -9 containerd# 3. 强制复制
sudo cp --remove-destination /root/containerd/bin/* /usr/bin/# 4. 重启服务
sudo systemctl start containerd docker

解决截图:

在这里插入图片描述

二,域名解析错误

root@wh-VMware-Virtual-Platform:~# ping www.baidu.com
ping: www.baidu.com: 域名解析出现暂时性错误
root@wh-VMware-Virtual-Platform:~#

现象截图:

在这里插入图片描述

以下是一些可能的原因和解决方法:

2.1 DNS 服务器配置问题

  • 原因:DNS 服务器可能没有正确配置,或者当前的 DNS 服务器无法解析 www.baidu.com
  • 解决方法
    1. 检查当前系统的 DNS 设置。你可以通过以下命令查看当前的 DNS 配置:

      cat /etc/systemd/resolved.conf
      

      如果发现 DNS 服务器地址不正确或不可用,可以手动修改为可靠的 DNS 服务器,例如 Google 的公共 DNS(8.8.8.8 和 8.8.4.4)或阿里云的公共 DNS(223.5.5.5 和 223.6.6.6)。

    2. 修改 /etc/systemd/resolved.conf 文件,添加以下内容:

      DNS=8.8.8.8 8.8.4.4
      
    3. 保存文件后, 重启 systemd-resolved 服务 ,再次尝试 ping

      sudo systemctl restart systemd-resolved
      

​ 解决截图:

在这里插入图片描述

2.2 网络连接问题

  • 原因:你的网络连接可能不稳定,或者网络配置有问题。
  • 解决方法
    1. 检查网络连接是否正常。尝试 ping 本地网关或其他已知的 IP 地址,例如:
      ping -c 4 8.8.8.8
      
      如果无法成功,说明网络连接可能有问题。
    2. 检查网络配置文件(如 /etc/network/interfaces/etc/netplan/*.yaml),确保网络配置正确。
    3. 如果是通过 DHCP 自动获取 IP 地址,尝试重启网络服务:
      sudo systemctl restart networking
      
      或者重启网络管理器:
      sudo systemctl restart NetworkManager
      

2.3 防火墙或安全组限制

  • 原因:防火墙或安全组可能阻止了 DNS 查询或 ICMP(ping)请求。
  • 解决方法
    1. 检查系统防火墙规则。你可以使用以下命令查看防火墙状态:
      sudo ufw status
      
      如果防火墙处于活动状态,确保允许 DNS 查询(UDP 端口 53)和 ICMP 流量。
    2. 如果你在虚拟机中运行,检查虚拟机的网络设置和宿主机的防火墙规则。

2.4 DNS 缓存问题

  • 原因:本地 DNS 缓存可能损坏或过期。
  • 解决方法
    1. 清除本地 DNS 缓存。在 Linux 系统中,可以尝试以下命令:
      sudo systemctl restart nscd
      
      或者:
      sudo systemctl restart NetworkManager
      
    2. 再次尝试 ping

三,卸载pcre

3.1 卸载通过 apt 安装的 PCRE

运行以下命令卸载系统中通过 apt 安装的 PCRE:

sudo apt remove --purge libpcre3 libpcre3-dev

这将删除所有与 PCRE 相关的包及其配置文件。

3.2 确认卸载成功

运行以下命令确认 PCRE 是否已被完全卸载:

pcre-config --version

如果系统提示 没有那个文件或目录,说明 PCRE 已被成功卸载。

在这里插入图片描述

四,openrsty

root@wh-VMware-Virtual-Platform:~/apisix-offline/apisix/apisix-3.12.0# openresty -v
openresty: symbol lookup error: openresty: undefined symbol: lua_getexdata
# 删除旧版OpenResty
sudo rm -rf /usr/local/openresty# 清理可能的残留库
sudo rm -f /usr/local/lib/libluajit-*.so*# 检查全局环境变量(确保无旧路径)
echo $LD_LIBRARY_PATH  # 如有旧路径,需修改~/.bashrc或/etc/profile#清除后重新安装

4.1 解决 APISIX 安装时的 GPG 公钥错误

此错误是由于 APT 软件源缺少 Docker 官方仓库的 GPG 公钥导致。以下是详细修复步骤:

1. 添加缺失的 Docker GPG 公钥
# 直接下载并安装 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg# 设置密钥文件权限
sudo chmod 644 /etc/apt/trusted.gpg.d/docker.gpg
2. 修正软件源配置

检查 /etc/apt/sources.list.d/ 目录下的 Docker 源文件(如 docker.list),确认其指向 华为云镜像源 时使用正确的密钥配置:

# 示例:华为云 Docker CE 镜像配置
echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/docker.gpg] https://repo.huaweicloud.com/docker-ce/linux/ubuntu noble stable" | sudo tee /etc/apt/sources.list.d/docker.list
3. 清除并更新 APT 缓存
# 清理旧缓存
sudo rm -rf /var/lib/apt/lists/*# 强制更新
sudo apt update --allow-insecure-repositories
4. 修复 APISIX 依赖安装

重新执行 APISIX 的依赖安装命令:

cd apisix-3.12.0
make deps

4.2关键问题解析

问题原因解决方案作用说明
缺少 Docker 仓库公钥手动下载并安装 GPG 密钥验证软件包签名合法性
镜像源签名配置错误在源配置中显式指定 signed-by 路径明确关联密钥与仓库
APT 缓存污染强制清理并更新缓存确保获取最新元数据

4.3验证修复结果

# 检查 Docker 源状态
sudo apt update 2>&1 | grep "docker-ce"# 预期输出应无 GPG 错误,显示仓库可更新:
# Get:1 https://repo.huaweicloud.com/docker-ce/linux/ubuntu noble InRelease [2,854 B]

4.4备选方案:跳过 GPG 验证(不推荐)

若紧急情况下需临时绕过验证(生产环境禁用):

# 修改源配置为信任仓库
echo "deb [trusted=yes] https://repo.huaweicloud.com/docker-ce/linux/ubuntu noble stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update

4.5 附录:Docker 官方源配置参考

# 标准 Docker 官方源(非镜像)
echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/docker.gpg] https://download.docker.com/linux/ubuntu noble stable" | sudo tee /etc/apt/sources.list.d/docker.list

五,docker拉取镜像超时

# 查看 containerd 是否正在运行
sudo systemctl status containerd# 如果未运行,启动服务并设置开机自启
sudo systemctl start containerd
sudo systemctl enable containerd

5.1 问题分析

Docker 在尝试拉取镜像时无法连接到 containerd 服务(底层容器运行时),导致超时错误。常见原因包括:

  • containerd 未运行:服务未启动或崩溃。
  • 权限问题:用户或 Docker 无权限访问 containerd.sock
  • 资源不足:系统资源(如磁盘空间、内存)耗尽。
  • 配置错误:Docker 或 containerd 的配置损坏。

5.2 逐步解决方案

1. 检查 containerd 服务状态
# 查看 containerd 是否正在运行
sudo systemctl status containerd# 如果未运行,启动服务并设置开机自启
sudo systemctl start containerd
sudo systemctl enable containerd
2. 验证 containerd.sock 文件权限
# 检查 socket 文件是否存在
ls -l /run/containerd/containerd.sock# 预期权限示例(所属组通常为 docker 或 root)
srw-rw---- 1 root root 0 Aug 10 15:30 /run/containerd/containerd.sock# 如果权限不符,修复权限并重启服务
sudo chmod 660 /run/containerd/containerd.sock
sudo chown root:docker /run/containerd/containerd.sock
sudo systemctl restart containerd
3. 重启 Docker 和 containerd 服务
sudo systemctl restart docker containerd
4. 检查系统资源
# 检查磁盘空间
df -h# 检查内存使用
free -h# 如果资源不足,清理空间或增加资源
5. 查看详细日志定位问题
# 查看 containerd 日志
sudo journalctl -u containerd --since "5 minutes ago"# 查看 Docker 日志
sudo journalctl -u docker --since "5 minutes ago"
6. 重装 Docker 和 containerd(若配置损坏)
# 卸载旧版本
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io# 清理残留文件
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd# 重新安装
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io# 启动服务
sudo systemctl start docker containerd

5.3 其他可能原因

1. Docker 与 containerd 版本不兼容
  • 确保使用官方支持的版本组合,参考 Docker 文档。
2. 防火墙/SELinux 拦截
# 临时禁用 SELinux(仅用于测试)
sudo setenforce 0# 如果问题解决,需调整 SELinux 策略或禁用
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3. 检查 Docker 配置文件
# 查看 Docker 的 containerd 配置
sudo cat /etc/docker/daemon.json# 如果文件存在,确保包含以下内容(若无则无需修改)
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": { "max-size": "100m" },"storage-driver": "overlay2"
}

六,apisix停服务报错

root@wh-VMware-Virtual-Platform:/home/apisix/apisix-3.12.0# apisix stop /usr/local/openresty//luajit/bin/luajit ./apisix/cli/apisix.lua stop nginx: [error] open() “/home/apisix/apisix-3.12.0/logs/nginx.pid” failed (2: No such file or directory)

6.1 问题原因

执行 apisix stop 时提示 nginx.pid 文件缺失,通常有两种可能:

  1. APISIX/Nginx 并未真正运行,因此没有生成 PID 文件。
  2. PID 文件路径配置错误,APISIX 找不到预期的 nginx.pid 文件。

6.2 解决步骤

1. 确认 APISIX/Nginx 是否正在运行
ps aux | grep -E 'apisix|nginx'
  • 如果输出中没有类似 nginx: worker processapisix 的进程,说明服务未运行,直接忽略错误即可(无需停止)。
  • 如果输出中有相关进程,说明服务仍在运行,但 PID 文件丢失,需手动停止。
2. 手动停止服务
  • 方法 1:优雅停止(推荐)
    如果知道 nginx.pid 的正确路径(比如在配置文件中指定了其他路径):

    nginx -p /home/apisix/apisix-3.12.0/ -c conf/nginx.conf -s stop
    
  • 方法 2:强制停止
    如果进程存在但找不到 PID 文件:

    sudo pkill -f nginx  # 强制终止所有 nginx 相关进程
    

6.3. 检查 PID 文件路径配置

打开 APISIX 的配置文件 conf/config.yaml,确认 nginx_config.pid_file 配置项:

nginx_config:pid_file: /home/apisix/apisix-3.12.0/logs/nginx.pid  # 检查此路径是否存在
  • 如果路径错误(例如目录不存在),需修改为正确路径或手动创建目录:
    mkdir -p /home/apisix/apisix-3.12.0/logs/
    

6.4. 重新启动 APISIX

停止后重新启动服务,观察是否正常生成 PID 文件:

apisix start
  • 检查 PID 文件是否生成:
    ls /home/apisix/apisix-3.12.0/logs/nginx.pid
    

6.5. 查看日志定位问题

如果启动失败,检查错误日志:

tail -f /home/apisix/apisix-3.12.0/logs/error.log

常见问题:

  • 端口被占用
  • 配置文件语法错误
  • 权限不足(可尝试用 sudo 运行)

希望本教程对您有帮助,请点赞❤️收藏⭐关注支持!欢迎在评论区留言交流技术细节!

相关文章:

  • 【计算机视觉】优化MVSNet可微分代价体以提高深度估计精度的关键技术
  • Koodo Reader:功能强大、体验卓越的电子书阅读器
  • Android 应用开发入门案例:使用 Fragment 实现水果详情展示
  • Linux系统:虚拟文件系统与文件缓冲区(语言级内核级)
  • 蓝牙身份证阅读器使用Uniapp调用二次开发demo
  • 湖北理元理律师事务所:债务优化如何实现还款与生活的平衡?
  • 【具身智能算法入门】VLM/VLA 算法入门指南
  • Spring Cloud: Nacos
  • 全栈开发实战:FastAPI + React + MongoDB 构建现代Web应用
  • PyTorch API 5 - 全分片数据并行、流水线并行、概率分布
  • 2025年RAG技术有哪些创新点?
  • Octave 绘图快速入门指南
  • Java云原生到底是啥,有哪些技术
  • 【目录】学习如何使用dify建设专业知识库
  • C语言_程序的段
  • 蔚来三品牌大整合:乐道产品研发、销售体系并入蔚来各集群|36氪独家
  • Ceph集群故障处理 - PG不一致修复
  • FPGA笔试题review
  • Java大数据可视化在城市空气质量监测与污染溯源中的应用:GIS与实时数据流的技术融合
  • OSPF综合性实验
  • 体坛联播|穆勒主场完成拜仁谢幕战,山西车队再登环塔拉力赛
  • 综艺还有怎样的新可能?挖掘小众文化领域
  • 涨知识|没想到吧,体育老师强调的运动恢复方法是错的?
  • 代理销售保险存在误导行为,农业银行重庆市分行相关负责人被罚款0.1万元
  • 见微知沪|优化营商环境,上海为何要当“细节控”自我加压?
  • 教育部、国家发改委联合启动实施教师教育能力提升工程