我有一个 systemctl 服务,其中包含、ip route add
和命令来动态配置 2 个接口。不知何故,在几秒钟/几分钟或随机之后,配置就消失了(不再分配 IP,路由和 arp 条目消失)。ifconfig
arp
ethtool
我该如何调试这个以及为什么我的设置消失了?
[Unit]
After=network-online.target
[Service]
ExecStart=/usr/local/bin/routingsf.sh enp4s0f0 enp4s0f1
[Install]
WantedBy=network-online.target
我有很多 sh*** 进程,例如Avahi-daemon
发送数据包进行广播,即使我不想这样做。这些接口用于测试目的,我不希望通过这些接口发送不需要的数据包。
如果 在您的和接口的列中
nmcli device status
有,则表示 NetworkManager 正在控制它们。disconnected
STATE
enp4s0f0
enp4s0f1
请以 root 身份运行以下命令:
告诉 NetworkManager 远离这些设备。那应该可以解决您的问题。通常 NetworkManager 应该自动存储这些设置,以便它们在重新启动后仍然存在,但这可能取决于您使用的 Linux 发行版。
在此之后,
nmcli device status
应将这些网络接口的状态显示为unmanaged
,表示您可以自由地手动配置这些,而不受 NetworkManager 的任何干扰。并且对您的 systemd 服务进行挑剔:如果您
routingsf.sh
不包含任何可以永久运行的内容,而只是“设置一次并完成”类型的命令,例如,ip route add
和,您可能需要在服务文件的部分添加两行:ifconfig
arp
ethtool
[Service]
如果您不指定服务类型,systemd 将假定
Type=simple
,这意味着启动的进程ExecStart=
预计将永远运行,直到故意停止。如果您routingsf.sh
不这样做,systemd 会注意到您的 ExecStart 命令退出,并将服务标记为失败。Type=oneshot
+的组合RemainAfterExit=yes
告诉 systemd 你的脚本应该做一些事情然后退出,如果脚本成功退出,systemd 应该将你的服务状态显示为“正在运行”。如果您想要一种简单的方法来使用标准命令ExecStop=
关闭和打开这些设置,您将可以选择添加相应的选项。systemctl