我的公司生产通过 USB 连接的 IoT 设备,其中包含一个蜂窝调制解调器模块,该模块包含一个 DHCP 服务器。我们有一台运行 Ubuntu 14.04 的生产测试服务器和另一台运行 Ubuntu 16.04 的服务器。当 IoT 设备的蜂窝调制解调器通电时,服务器的 dhclient 会从蜂窝调制解调器模块中嵌入的 DHCP 服务器获取 IP 地址。
昨天,14.04 服务器的 inode 用完了,因为660万 dhclient-<uuid>-usbXX.lease
文件/var/lib/NetworkManager/
。
由于需要让系统运行以用于生产目的,我无法全面检查系统,但看起来这些租约文件可以追溯到大约 14 个月前服务器调试时。也就是说,NetworkManager 和/或 dhclient(来自 isc-dhcp-client 包)似乎从未删除过任何客户端租约文件。
问题更加严重的是,每次打开蜂窝调制解调器设备时,似乎都会创建一个新的租约文件。(物联网设备会保持蜂窝调制解调器关闭以节省电池电量,仅在需要时打开。测试包括多次打开和关闭调制解调器。)
我sudo apt-get source isc-dhcp-client
检查了源代码,似乎从来没有删除租约文件的代码。事实上,我的笔记本电脑(Ubuntu 14.04)有可追溯到其调试的租约文件。(我已经连接了一些我们的 IoT 设备,以及各种其他以太网 USB 适配器。)
租赁文件的有效期非常合理,为 24 小时。
我正在研究如何针对我们的 IoT 设备取消配置 dhclient,但是,如果我们决定对蜂窝数据连接进行测试,我宁愿不这样做。
有没有办法让 dhclient 和/或 NetworkManager 删除旧的客户端租约文件?
我可以设置一个 cron 作业来处理这个问题,但它似乎是系统应该有的一部分。我就是找不到它。我在 Google 上搜索,搜索了这里/StackOverflow,并阅读了 dhclient 和 NetworkManager 文档。
注意:我的声誉不足以创建标签 dhclient,因此我用 dhcp 代替。