When running isc-dhcp the leases file seems to grow indefinitely (several hundred MB). If I restart the isc-dhcp service, the file shrinks to 1.5MB.
How can I have isc-dhcp flush expired records periodically without restarting the full service?
As MadHatter mentioned in a comment, the leases file is periodically re-created to avoid this problem. While the period isn't mentioned in the documentation, discussions on the dhcp-users mailinglist indicates that it should be done once an hour, and I've checked the source code and found that this is correct.
Unfortunately this isn't a configurable option. In order to change it, you'd need to compile the dhcp server from source. In the file server/db.c
you'd need to change the line
#define LEASE_REWRITE_PERIOD 3600
to the number of seconds you'd prefer.
Check the answer to my question How do I purge dhcpd.leases. In my case the ownership of /var/lib/dhcp was root:root owing to a bug in isc-dhcp-server. Changing it to dhcpd:dhcpd fixes the problem temporarily, but it comes back when dhcpd restarts.
dhcpd
does this itself automatically, but at a frequency of its choosing. How long are your leases? Is there a good business reason not to just bounce the daemon?