You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Server 20.04下systemd启动脚本无法初始化TAP网桥问题求助

Ubuntu Server 20.04下systemd启动脚本无法初始化TAP网桥问题求助

嗨,我来帮你捋捋这个问题哈!从你给出的日志能看出来,核心问题很明确:systemd启动脚本的时候,tap0设备还压根不存在,所以才会报错“Cannot find device 'tap0'”。手动跑脚本没问题,估计是你手动执行前已经通过其他方式创建过tap0了,但开机时这个设备还没被生成出来。

我给你整理几个关键的修复步骤:

1. 先修正你的启动脚本

你的脚本只做了启动tap0和添加到网桥的操作,但完全没创建tap0设备!这就是开机报错的核心原因。另外脚本里的&和wait其实没必要,反而可能打乱执行顺序,建议去掉。修改后的脚本如下:

#!/bin/bash

# 先创建tap0设备(如果不存在的话)
ip tuntap add dev tap0 mode tap
# 启动tap0接口
ip link set tap0 up
# 将tap0添加到br0网桥
brctl addif br0 tap0

echo "finish"

记得给脚本加上执行权限:

chmod +x /usr/local/bin/tap.sh

2. 调整systemd服务的启动时机和配置

systemd默认启动服务的时机可能太早,导致br0网桥或者网络环境还没准备好。你需要修改/etc/systemd/system/tap.service文件,确保服务在网络就绪后再启动,并且拥有足够权限:

[Unit]
Description=TAP Interface
# 确保在网络服务完全启动后再执行脚本
After=network.target
# 依赖网络目标,确保网络环境就绪
Requires=network.target

[Service]
# 执行ip、brctl需要root权限,指定以root运行
User=root
Group=root
# 指向你的脚本路径
ExecStart=/usr/local/bin/tap.sh
# 这是一次性任务,执行完就退出
Type=oneshot
# 即使脚本退出,也标记服务为活跃状态
RemainAfterExit=yes

[Install]
# 绑定到多用户目标,确保开机时启动
WantedBy=multi-user.target

如果你的br0是通过netplan配置的,建议把After改成netplan-wpa@*.service或者对应的netplan服务,确保br0已经完全创建后再执行脚本。

3. 重新加载配置并测试

完成上面两步后,执行以下命令让systemd生效:

# 重新加载systemd配置
systemctl daemon-reload
# 重启服务测试
systemctl restart tap.service
# 查看服务状态
systemctl status tap.service

如果没有报错,再确认开机自启:

systemctl enable tap.service

这样应该就能解决开机时无法初始化TAP网桥的问题啦!

备注:内容来源于stack exchange,提问作者Adsuporte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:15:27