5

Background:

I have a package that provides a systemd unit file that is incompatible with LXD. Specifically, it uses the following two options, which seem to fail inside a container:

[Service]
IOSchedulingClass=realtime
CPUSchedulingPolicy=rr

So, I tried to override these with a drop-in using systemctl edit with the following contents:

[Service]
IOSchedulingClass=
CPUSchedulingPolicy=

But then I get the following messages in journalctl -xe:

Jun 17 18:40:14 nickel systemd[1]: [/etc/systemd/system/freeswitch.service.d/override.conf:2] Failed to parse IO scheduling class, ignoring: 
Jun 17 18:40:14 nickel systemd[1]: [/etc/systemd/system/freeswitch.service.d/override.conf:4] Failed to parse CPU scheduling policy, ignoring: 

Question:

It seems that unsetting options like this isn't allowed. I also tried using a pair of empty quotes (e.g. IOSchedulingClass=""). What would be the proper way to do this? I know I can just override the whole unit file, but I'd prefer not to mask any later updates from the packaged unit file if possible.

For reference, the systemd.exec(5) manpage suggests that there should be some way to do it:

If the empty string is assigned to this option, all prior assignments to both IOSchedulingClass= and IOSchedulingPriority= have no effect.

1 Answer 1

2

That sounds like a bug, but I'd try

[Service]
IOSchedulingClass=best-effort
CPUSchedulingPolicy=other

to work around it. Those are the default values, taken from the ioprio_set and sched_setscheduler manpages.

You can, of course, also override the entire unit file by putting one with the same name in /etc/systemd/system/. Sensible to avoid doing this as its surely more maintenance work (though you could probably script it as part of your container build).

1

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .