DEV Community

Nurlan
Nurlan

Posted on

Understanding Drop-in Overrides in systemd: When Parameters Accumulate vs Override

When working with systemd units, you often want to override or tweak an existing unit file without rewriting it entirely. That's where drop-in overrides come in.

But there's a subtle behavior many people miss: not all parameters behave the same way when overridden! Some get completely replaced; others accumulate values.

This article explains this behavior, especially for those dealing with .timer or .service files.


🔍 What are drop-in overrides?

A drop-in override is an additional configuration file placed under /etc/systemd/system/<unit>.d/*.conf that supplements or overrides the main unit definition.

For example:

/etc/systemd/system/pkgfile-update.timer.d/override.conf
Enter fullscreen mode Exit fullscreen mode

Contents:

[Timer]
OnCalendar=weekly
Enter fullscreen mode Exit fullscreen mode

It lets you modify behavior without touching /usr/lib/systemd/system/pkgfile-update.timer.

Another way to do this is to run:

sudo systemctl edit unit --drop-in=drop_in_name
Enter fullscreen mode Exit fullscreen mode

This opens the file /etc/systemd/system/unit.d/drop_in_name.conf in your text editor (creating it if necessary) and automatically reloads the unit when you are done editing. Omitting --drop-in= option will result in systemd using the default file name override.conf.


But here's the catch: OnCalendar doesn't override, it adds

If the original timer file contains:

[Timer]
OnCalendar=daily
Enter fullscreen mode Exit fullscreen mode

And your drop-in contains:

[Timer]
OnCalendar=weekly
Enter fullscreen mode Exit fullscreen mode

Then both schedules will be active: daily and weekly.

This is because OnCalendar supports multiple entries; adding a new one doesn't replace the old.

You can verify this with:

systemctl show pkgfile-update.timer | grep OnCalendar
Enter fullscreen mode Exit fullscreen mode

✅ How to truly override OnCalendar

To replace existing values, you must explicitly reset the field:

[Timer]
OnCalendar=
OnCalendar=weekly
Enter fullscreen mode Exit fullscreen mode

The first OnCalendar= clears all previous values. The second sets the new one.

Then reload and restart:

sudo systemctl daemon-reload
sudo systemctl restart pkgfile-update.timer
Enter fullscreen mode Exit fullscreen mode

Key takeaway

If you override parameters in systemd drop-ins, be aware:

  • Some parameters stack up (accumulate) → use an empty assignment to clear.
  • Others overwrite directly.

This small difference can save hours debugging why your override didn't "take effect".

Happy systemd hacking!

Top comments (0)