禁用和卸载树莓派 4B 上 avahi-daemon

博主在树莓派4B运行Ubuntu时发现avahi-daemon占用CPU过高,介绍了如何禁用和卸载该服务以优化系统性能。avahi-daemon用于zeroconf网络服务,但若不需要此功能,可通过停止、禁用avahi-daemon.socket和服务,或完全卸载来解决。在尝试禁用无效后,博主选择卸载avahi-daemon及其依赖,并提供了相关命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键词:树莓派、Linux、avahi、avahi-daemon、CPU

如果移动端访问不佳,请访问–> GithubPage 版

背景

在树莓派4B上安装了官方的 Ubuntu 系统,运行 top 指令,发现 avahi-daemon 占用 CPU 高,且对 CPU 的消耗波动比较大。

查资料发现:

Avahi 允许程序在不需要进行手动网络配置的情况 下,在一个本地网络中发布和获知各种服务和主机。例如,当某用户把他的计算机接入到某个局域网时,如果他的机器运行有Avahi服务,则Avahi程式自动广播,从而发现网络中可用的打印机、共享文件和可相互聊天的其他用户。这有点象他正在接收局域网中的各种网络广告一样。

除非你有兼容的设备或使用 zeroconf 协议的服务,否则应该关闭它。

我不需要 zeroconf 的相关功能,遂尝试禁用或者卸载 avahi-daemon

处理过程

基本环境:

  • 硬件:树莓派4B
  • 系统:Ubuntu 21.10 (GNU/Linux 5.13.0-1031-raspi aarch64)
  • 权限:root 用户权限

方式一:停止和禁用服务

首先尝试禁用 avahi-daemon :(root 权限)

# 尝试停止并禁用 avahi-daemon
## 查看 avahi-daemon 当前状态
systemctl status avahi-daemon.service
## 停止 avahi-daemon
systemctl stop avahi-daemon.service
## 再次查看 avahi-daemon 当前状态
systemctl status avahi-daemon.service
## 禁用 avahi-daemon
systemctl disable avahi-daemon.service

执行停止 avahi-daemon 的时候,返回一个提示:avahi-daemon.socket 可能会重启 avahi-daemon。出现这种情况时,说明 avahi-daemon 是由 avahi-daemon.socket 启动的,我们单独停止和禁用 avahi-daemon 是不行的,它还会自动启动。

需要先停止 avahi-daemon.socket,再停止 avahi-daemon

# 停止和禁用 avahi-daemon.socket
## 查看 avahi-daemon.socket 当前状态
systemctl status avahi-daemon.socket
## 停止 avahi-daemon
systemctl stop avahi-daemon.socket
## 再次查看 avahi-daemon 当前状态
systemctl status avahi-daemon.socket
## 禁用 avahi-daemon
systemctl disable avahi-daemon.socket

# 停止和禁用 avahi-daemon
## 查看 avahi-daemon 当前状态
systemctl status avahi-daemon.service
## 停止 avahi-daemon
systemctl stop avahi-daemon.service
## 再次查看 avahi-daemon 当前状态
systemctl status avahi-daemon.service
## 禁用 avahi-daemon
systemctl disable avahi-daemon.service

由于本人遇到了重启后这2个服务还会自动重启的情况,所以最终通过卸载的方式来解决的。你可以根据自己的实际情况,决定是否使用卸载的方案。

方式二:卸载 avahi-daemon 相关的所有服务

由于单纯的卸载 avahi-daemon 可能引起依赖它的软件无法正常运行,此操作需要慎重考虑和检测:

# 卸载方式一:卸载并清理配置文件
apt-get purge avahi-daemon
# 卸载方式而:卸载并保留配置文件
apt-get remove avahi-daemon
#注意:卸载时可能会提示下列软件包将被【卸载】,即卸载 avahi-daemon 会同时卸载依赖它的软件

# 最后,你可以清理下不需要的自动安装的软件:
apt autoremove

资料:

如果有什么建议或者问题可以随时联系我,共同探讨学习:

### 如何在 Docker 中设置使用 Avahi-Daemon 为了使 `avahi-daemon` 正确工作,在容器内运行它需要解决几个挑战,主要是因为 `avahi-daemon` 需要访问主机网络栈来广播多播DNS (mDNS)消息。 #### 创建自定义Docker镜像以支持Avahi-Daemon 创建一个基于官方基础映像并安装必要软件包的新Dockerfile: ```dockerfile FROM debian:buster-slim RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y avahi-daemon iputils-ping net-tools procps && \ rm -rf /var/lib/apt/lists/* CMD ["avahi-daemon", "-n"] ``` 此文件会构建一个新的Debian精简版镜像,并在其上安装`avahi-daemon`及相关工具。最后指定启动命令为`avahi-daemon -n`[^1]。 #### 构建与运行带有Avahi守护进程的容器 保存上述内容到名为`Dockerfile` 的文件中,接着在同一目录下执行如下指令来构建新镜像: ```bash docker build -t my-avahi-container . ``` 之后可以利用下面这条命令启动容器实例,注意这里启用了host模式以便让容器能够直接参与宿主机所在局域网内的mDNS通讯: ```bash docker run --network host -d my-avahi-container ``` 这种方式使得容器内部的服务可以直接绑定到物理接口而不是虚拟桥接设备之上,从而允许其正常发送/接收来自其他机器上的Bonjour/mDNS查询响应[^2]。 #### 测试Avahi服务是否生效 可以通过安装`avahi-discover`或其他类似的客户端程序来进行简单的功能验证。如果一切顺利的话,则应该可以在本地网络范围内解析出由该容器发布的名称记录。 另外值得注意的是,当涉及到Kubernetes集群时,可能会遇到因`avahi-daemon`引发的问题,比如节点状态变为NotReady的情况。这通常是因为存在主机名冲突所致,而这类问题已经在较新的版本得到了修正[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值