Din Surse DHCP:
if (snprintf (backfname, sizeof backfname, "%s~", path_dhcpd_db) >= sizeof backfname)
[...]
if (deconectare (backfname) < 0 && errno != ENOENT) {
[...]
dacă (link(path_dhcpd_db, backfname) < 0) {
Fișierul de rezervă anterior este șters, apoi fișierul de închiriere curent este conectat ca backup cu un final ~.
Pe Linux, cu notificare(7) facilitate pentru evenimente, un hardlink este văzut ca un eveniment de creație.
Aș sugera să folosești inotifywait (din inotify-instrumente pachet) pentru a semnala când a avut loc un astfel de eveniment. Ar trebui să se aștepte la apariția /var/lib/dhcpd/dhcpd.leases~ care este apoi direct gata pentru backup (este un hardlink către original). Deoarece fișierul va fi un fișier diferit (inod diferit) de fiecare dată, directorul ar trebui urmărit pentru detectarea corectă și, de exemplu, --include opțiunea poate fi utilizată pentru a simplifica procesarea shell (nicio procesare, chiar și linia de citire este eliminată într-o variabilă inactivă):
inotifywait -m -e create --include dhcpd.leases~ /var/lib/dhcpd | în timp ce citiți manechin; do
do_backup /var/lib/dhcpd/dhcpd.leases~
Terminat
Dacă comanda nu este suficient de recentă, este posibil să nu înțeleagă --include în acest caz, testul trebuie făcut în bucla de evenimente:
inotifywait -m -e create /var/lib/dhcpd | while read -r dir nume fișier eveniment; do
if [ "$filename" = dhcpd.leases~ ]; atunci
do_backup /var/lib/dhcpd/dhcpd.leases~
fi
Terminat
Alternativ, incron pachet (disponibil cel puțin pe CentOS 8 Stream), ar putea fi folosit cu un intrare similar cu:
/var/lib/dhcpd IN_CREATE,recursive=false if_correct_file_do_backup $#
cu if_correct_file_do_backup fiind, de exemplu, un shell care verifică, acesta a fost numele de fișier dorit:
#!/bin/sh
if [ "$1" = dhcpd.leases~ ]; atunci
do_backup /var/lib/dhcpd/dhcpd.leases~
fi