根据this answer,DHCPd租约文件每小时清除一次。目标是连续备份租约文件,因此永远不会丢失租约。这很困难,因为不清楚小时计时器是基于系统时间(例如,文件在凌晨 1 点、凌晨 2 点、凌晨 3 点等重写)还是处理时间(service_start + 1h、service_start + 2h 等)。假设租约文件在凌晨 3 点清空,租约在 2:58:55 授予;备份租约文件的服务需要在清理文件之前快速运行。
DHCPd 进程将自己的文件备份到/var/lib/dhcpd/dhcpd.leases~
. 最好的选择似乎是制作一个脚本,每小时将此文件备份到另一个位置。但是,如果重新启动 DHCPd 进程并且计时器相对于该进程,则备份任务上的小时标记可能会对齐,这可能会导致一个进程读取而另一个进程写入,这可能会破坏文件(取决于它是如何完成的)。因此,备份任务需要了解 DHCPd 何时启动。这变得越来越复杂。
备份 DHCPd 租约文件的“正确”方法是什么,因此不会丢失任何租约?
从DHCP 来源:
先前的备份文件被删除,然后当前的租约文件被硬链接为带有尾随
~
.在 Linux 上,使用inotify(7)事件工具,硬链接被视为创建事件。
我建议在发生此类事件时使用
inotifywait
(从包中)发出信号。inotify-tools
人们应该期望它的幻影/var/lib/dhcpd/dhcpd.leases~
直接准备好备份(它是原始的硬链接)。由于文件每次都是不同的文件(不同的inode),因此应该监视目录以进行正确检测,例如该--include
选项可用于简化shell处理(不处理,即使读取的行被丢弃在虚拟变量):如果命令不是最新的,
--include
在这种情况下它可能无法理解,测试必须在事件循环中完成:或者,该
incron
软件包(至少在 CentOS 8 Stream 上可用)可以与类似于以下内容的条目一起使用:例如,
if_correct_file_do_backup
作为一个 shell 检查这是预期的文件名: