在我尝试之前,我想确定这将是有效的,因为我正在处理一个只通过SSH访问的无头Pi (如果重要的话是零W)。
我已经在我的路由器中为Pi设置了一个地址预留,这或多或少是必要的,它可以简化通过Putty的访问,也可以访问运行在Pi上的自定义服务器。
问题是,最初没有预约,所以它在池中的其他随机地址,而不是固定的地址,在“非池”区域,我已经为它预留了。耐心并没有解决这个问题:它已经坚持了几天,而不是改变。我假设在路由器中DHCP服务器有一个合理的租约长度,例如12或24小时。
显然,如果我只使用dhclient -r来释放租约,我当前的SSH会话就会中止,留下的东西是一个不太有用的状态。我还注意到,如果您使用dhclient -r,也可能会导致WiFi连接中断:有关详细信息,请参阅此页底部的警告。
那么,输入根bash会话的nohup (dhclient -r -d && dhclient) &是否会(a)终止当前的租约,然后(b)在需要时尝试重新打开WiFi,最后(c)获得新的租约,希望地址正确。
我的推理是,使用nohup意味着当SSH会话向南时它不会接收到SIGHUP,而将它放在后台的子shell中意味着它执行这两个命令的几率最高。
我考虑过的另一个选项是根bash会话中的nohup (dhclient -r && reboot) &,其逻辑是重新启动系统应该重新建立WiFi连接,然后为DHCP服务器提供一个地址。希望是保留的那个。
如果这两种方法都失败了,我还可以选择哪些其他方法来释放和续签租约,并在首选地址以连接到WiFi的运行系统结束呢?作为最后的手段,我可以看到我是否能想出如何连接一个屏幕和键盘,但我真的不想这样做,这将是一个相当大的痛苦。
发布于 2022-03-14 23:37:00
免责声明:我无法测试它,但由于只有最后一个可选步骤才会更改任何永久配置,更糟糕的是必须重新设置系统。
为了举例,让我们假设:
一切都应该以root用户的身份运行。方法是:
promote_secondaries (当在IP LAN上配置的第一个地址被删除时,同一IP LAN中的所有其他地址也会被删除:新地址也将被删除) sysctl -w net.ipv4.conf.wlan0.promote_secondaries=1或: echo 1>dhclient、dhcpcd、udhcpc以及其他DHCP客户端是否在使用中,或者即使其中一个客户端仍在运行(一些最小的配置可能只获得一次IP地址并退出,而根本不处理租约续签或到期)。pkill -e -KILL dhclient或pkill -e -KILL dhcpcd等,或者如果没有pkill命令,则计算出要杀死的PID (使用kill -KILL ...)。重要的是要确保从今以后不再有客户在运行。/etc/network/interfaces中进行配置,或者配置方式不同)。但是无论如何,没有任何改变,在下一次(重新)引导时,这将采用这个新IP地址的新租约,或者如果真的有一个bug恢复到旧的。如果DHCP是由dhclient处理的,通过删除/var/lib/dhcp/dhclient*.leases中的相关文件来擦除租约内存将迫使它下次请求新的租约。对于dhcpcd,可能是/var/lib/dhcpcd/*.leasehttps://unix.stackexchange.com/questions/694406
复制相似问题