哪个进程更改了我的配置?

哪个进程更改了我的配置?

我有一个 systemctl 服务ip route add,带有ifconfigarpethtool命令来动态配置 2 个接口。不知何故,几秒/分钟或随机后,配置就消失了(IP 不再分配,路由和 arp 条目消失)。

我该如何调试这个问题以及为什么我的设置消失了?

[Unit]
After=network-online.target

[Service]
ExecStart=/usr/local/bin/routingsf.sh enp4s0f0 enp4s0f1

[Install]
WantedBy=network-online.target

我有很多 sh*** 进程,例如Avahi-daemon发送数据包进行广播,即使我不想这样做。这些接口用于测试目的,我不希望通过这些接口发送不需要的数据包。

答案1

如果您的和接口列 中nmcli device status有,则意味着 NetworkManager 正在接管它们。disconnectedSTATEenp4s0f0enp4s0f1

请以 root 身份运行以下命令:

nmcli device set enp4s0f0 managed no
nmcli device set enp4s0f1 managed no

告诉 NetworkManager 不要把手放在这些设备上。这应该可以解决你的问题。通常 NetworkManager 应自动存储这些设置,以便它们在重新启动后仍然存在,但这可能取决于您使用的 Linux 发行版。

此后,nmcli device status这些网络接口的状态应显示为unmanaged,表示您可以自由地手动配置这些接口,而不受 NetworkManager 的任何干扰。


还有一个对您的 systemd 服务的挑剔:如果您routingsf.sh不包含任何永久运行的内容,而只是“设置一次并完成”类型的命令,例如ip route addifconfigarpethtool您可能需要在[Service]服务文件的部分添加两行:

Type=oneshot
RemainAfterExit=yes

如果您不指定服务类型,systemd 将假定Type=simple,这意味着启动的进程ExecStart=预计将永远运行,直到故意停止。如果您routingsf.sh不这样做,systemd 将注意到您的 ExecStart 命令退出,并将服务标记为失败。

Type=oneshot+的组合RemainAfterExit=yes告诉 systemd 您的脚本预计会执行一些操作然后退出,并且如果脚本成功退出,则 systemd 应该将您的服务状态显示为“正在运行”。ExecStop=如果您想要一种简单的方法来使用标准命令关闭和打开这些设置systemctl,那么您将可以选择添加相应的选项。

相关内容