Linux 在真正长时间停机后自我恢复 DHCP?

Nie*_*jes 8 dhcp networkmanager linux-networking centos6 centos7

我有几个 CentOS 6/7 系统(非生产、实验用途)已配置为使用 DHCP 作为其 IP 地址。上周发生了一次严重的网络中断,我发现这些系统丢失了 IP 地址并且 DHCP 客户端已终止。我想经过太多/太长时间的重试。

让它尝试永远恢复的正确方法是什么?是否有可以执行此操作的 dhcp 客户端设置?或者我应该添加一个 cron 条目,它每小时执行一次“ifup eth0”之类的操作?或者有没有更好的方法来做到这一点?

我知道 CentOS 6 和 CentOS 7 做这些事情的方式不同,我正在为这两种情况寻找答案。


更新:

现在我已经创建了这个脚本(我把它放在 /etc/cron.hourly/ 中),它似乎在 CentOS 6 的特定情况下工作。这可能不是最好的解决方案,但它“在我的机器上工作”。

#!/bin/bash

IF=eth0

ifconfig ${IF} | fgrep 'inet addr' > /dev/null

if [ $? -ne 0 ];
then
    echo "Network is dead, trying restart"
    ifup ${IF}
fi
Run Code Online (Sandbox Code Playgroud)

仍在寻找正确的方法来做到这一点,所以我认为这不是我问题的正确答案。

小智 5

CentOS 6 和 7 都应该接受 /etc/sysconfig/network-scripts/ifcfg* 文件中的 PERSISTENT_DHCLIENT 选项。例如

# /etc/sysconfig/network-scripts/ifcfg-eth0 
BOOTPROTO=dhcp
PERSISTENT_DHCLIENT=yes
ONTBOOT=yes
DEVICE=eth0
Run Code Online (Sandbox Code Playgroud)

这会指示 ifup-eth 脚本在没有(默认)-1选项的情况下运行 dhclient

if is_true "${PERSISTENT_DHCLIENT}"; then
    ONESHOT="";
else
    ONESHOT="-1";
fi;
...
DHCLIENTARGS="${DHCLIENTARGS} ${ONESHOT} -q ${DHCLIENTCONF} -lf ${LEASEFILE} -pf /var/run/dhclient-${DEVICE}.pid"
Run Code Online (Sandbox Code Playgroud)

使用该选项 dhclient 将尝试一次。从手册页

-1 Try once to get a lease. One failure, exit with code 2.
Run Code Online (Sandbox Code Playgroud)

如果没有该选项,dhclient 应该偶尔从 dhclient.conf 手册页重试一次(默认情况下每 5 分钟一次)

retry time;

The retry statement determines the time that must pass after the client 
has determined that there is no DHCP server present before it tries 
again to contact a DHCP server. By default, this is five minutes.
Run Code Online (Sandbox Code Playgroud)