2

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?

Jon Skarpeteig
  • 941
  • 2
  • 14
  • 28
  • The documentation suggests `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? – MadHatter Sep 02 '14 at 07:12
  • I use fairly short leases. I don't want to crontab a service restart, since truncating a large leases file seems to take a min - leaving the DHCP service off for the duration – Jon Skarpeteig Sep 02 '14 at 07:25
  • 2
    Is there a good reason not to use longer leases? That would prevent the file from growing so fast. – MadHatter Sep 02 '14 at 07:42
  • It's only a workaround for DHCP scope running full. – Jon Skarpeteig Sep 02 '14 at 08:35
  • 2
    It's only a workaround if there's a business reason to use short leases; otherwise, you're running misconfigured, and upset that the daemon won't clean up after you. – MadHatter Sep 02 '14 at 08:50
  • "The documentation suggests dhcpd does this itself automatically, but at a frequency of its choosing" -- URL? – Jon Skarpeteig Sep 02 '14 at 09:11
  • Let us [continue this discussion in chat](http://chat.stackexchange.com/rooms/16857/discussion-between-jon-skarpeteig-and-madhatter). – Jon Skarpeteig Sep 02 '14 at 09:17
  • For the avoidance of doubt, from `man dhcpd.leases`: "*In order to prevent the lease database from growing without bound, the file is rewritten from time to time.*". But Jenny D has provided an excellent answer (as usual!), and I think no further input is required of me. – MadHatter Sep 02 '14 at 10:13

2 Answers2

10

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.

Jenny D
  • 27,358
  • 21
  • 74
  • 110
0

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.

kbro
  • 193
  • 1
  • 1
  • 8