จาก แหล่งที่มาของ DHCP:
ถ้า (snprintf (backfname, sizeof backfname, "%s~", path_dhcpd_db) >= sizeof backfname)
[...]
ถ้า (ยกเลิกการเชื่อมโยง (backfname) < 0 && errno != ENOENT) {
[...]
ถ้า (ลิงค์ (path_dhcpd_db, backfname) < 0) {
ไฟล์สำรองข้อมูลก่อนหน้าจะถูกลบออก จากนั้นไฟล์เช่าปัจจุบันจะถูกฮาร์ดลิงก์เป็นข้อมูลสำรองโดยมีการต่อท้าย ~.
บน Linux ด้วย แจ้งเตือน(7) สิ่งอำนวยความสะดวกเหตุการณ์ ฮาร์ดลิงก์ถูกมองว่าเป็นเหตุการณ์การสร้าง
ฉันอยากจะแนะนำให้ใช้ แจ้งเตือน (จาก เครื่องมือ inotify package) เพื่อส่งสัญญาณเมื่อเหตุการณ์ดังกล่าวเกิดขึ้น เราควรคาดหวังการปรากฏของ /var/lib/dhcpd/dhcpd.leases~ ซึ่งพร้อมสำหรับการสำรองข้อมูลโดยตรง (เป็นฮาร์ดลิงก์ไปยังต้นฉบับ) เนื่องจากไฟล์จะเป็นไฟล์ที่แตกต่างกัน (ไอโหนดที่แตกต่างกัน) ในแต่ละครั้ง จึงเป็นไดเร็กทอรีที่ควรได้รับการตรวจหาที่เหมาะสม และตัวอย่างเช่น --รวม สามารถใช้ตัวเลือกเพื่อทำให้การประมวลผลเชลล์ง่ายขึ้น (ไม่มีการประมวลผล แม้แต่บรรทัดที่อ่านก็ถูกละทิ้งในตัวแปรจำลอง):
inotifywait -m -e สร้าง --include dhcpd.leases~ /var/lib/dhcpd | ในขณะที่อ่านดัมมี่ ทำ
do_backup /var/lib/dhcpd/dhcpd.leases~
เสร็จแล้ว
หากคำสั่งไม่ใหม่พอ คำสั่งนั้นอาจไม่เข้าใจ --รวม ในกรณีเช่นนี้ จะต้องทำการทดสอบใน event loop:
inotifywait -m -e สร้าง /var/lib/dhcpd | ในขณะที่อ่านชื่อไฟล์เหตุการณ์ -r dir; ทำ
ถ้า [ "$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 ตัวอย่างเช่น เชลล์กำลังตรวจสอบว่านี่คือชื่อไฟล์ที่ต้องการ:
#!/bin/sh
ถ้า [ "$1" = dhcpd.leases~ ]; แล้ว
do_backup /var/lib/dhcpd/dhcpd.leases~
ไฟ