От Источники DHCP:
if (snprintf (backfname, sizeof backfname, "%s~", path_dhcpd_db) >= sizeof backfname)
[...]
if (unlink (backfname) < 0 && errno != ENOENT) {
[...]
если (ссылка (path_dhcpd_db, backfname) < 0) {
Предыдущий файл резервной копии удаляется, затем текущий файл аренды жестко связывается как резервная копия с конечным ~.
В Linux с помощью инотифицировать(7) события, жесткая ссылка рассматривается как событие создания.
я бы предложил использовать inotifywait (от inotify-инструменты package), чтобы сигнализировать, когда такое событие произошло. Следует ожидать появления /var/lib/dhcpd/dhcpd.leases~ который затем сразу готов к резервному копированию (это жесткая ссылка на оригинал). Поскольку файл каждый раз будет другим файлом (разным индексным узлом), это каталог, за которым следует следить для правильного обнаружения, и, например, --включать можно использовать для упрощения обработки оболочки (без обработки, даже строка чтения отбрасывается в фиктивной переменной):
inotifywait -m -e create --include dhcpd.leases~ /var/lib/dhcpd | пока читается манекен; делать
do_backup /var/lib/dhcpd/dhcpd.leases~
сделано
Если команда недостаточно свежа, она может не понять --включать в таком случае тест должен быть выполнен в цикле событий:
inotifywait -m -e создать /var/lib/dhcpd | при чтении -r имя файла события каталога; делать
если [ "$filename" = dhcpd.leases~ ]; тогда
do_backup /var/lib/dhcpd/dhcpd.leases~
фи
сделано
Альтернативно, инкрон пакет (доступный по крайней мере в CentOS 8 Stream), может использоваться с вход похожий на:
/var/lib/dhcpd IN_CREATE, recursive=false if_correct_file_do_backup $#
с if_correct_file_do_backup например, оболочка, проверяющая, что это предполагаемое имя файла:
#!/бин/ш
если [ "$1" = dhcpd.leases~ ]; тогда
do_backup /var/lib/dhcpd/dhcpd.leases~
фи