systemd网络服务不工作



今天,我在我的机器中安装了ubuntu 16.04。当我启动系统时,我无法从DHCP服务器获取IP地址。网络接口从eth0重命名为enp2s0。我只在运行命令后得到IP地址:

$ sudo ethtool -s enp2s0 autoneg off speed 100

我试图在init脚本(/etc/rc.local)中添加这个命令,但在重新启动系统后它就不起作用了。

所以,从现在开始,当我的机器启动时,我总是需要手动添加上面的命令来获取IP地址。

有人能帮我解决这个问题吗?

提前谢谢。

谨致问候,

由于您使用的是ubuntu,请使用命令行并执行以下操作:

$sudo crontab-e

并通过在最后添加以下内容来添加您希望在重新启动时执行的脚本:

@重新启动ethtool-s enp2s0 autoneg关闭速度100

希望这能有所帮助。

systemd认为"rc.local"one_answers"crontab"都是"遗留"。两者都有替代品。然而,Ubuntu 16.04支持这两个概念。

我认为您的问题是,现在rc.local在网络完全联机之前运行,导致您的命令失败。

查看/lib/systemd/system/rc.local.service,了解systemd是如何运行rc.local文件的。特别要注意的是,行After=network.target

尝试创建此文件:

/etc/systemd/systemd/rc.local.service.d/10-wait-for-network.conf

添加以下行:

[Unit]
After=network-online.target

然后重新启动,看看这是否适合你。

参考文献:

  • 强制服务等待网络配置
  • 使用systemd插入单元

此外,在未来,SO不是systemd问题的最佳位置。考虑http://askubuntu.com而是Ubuntu的问题。

我还要补充一点,您发现的行为更改可能被认为是Ubuntu如何用systemd模拟rc.local支持的一个错误。如果提议的修复有效,也许Ubuntu应该将rc.local的替换更改为在network-online之后加载,而不是在network之后加载。