Fundo:
Eu tenho um pacote que fornece um arquivo de unidade systemd que é incompatível com o LXD. Especificamente, ele usa as duas opções a seguir, que parecem falhar dentro de um contêiner:
[Service]
IOSchedulingClass=realtime
CPUSchedulingPolicy=rr
Então, tentei substituí-los com um drop-in usando systemctl edit
o seguinte conteúdo:
[Service]
IOSchedulingClass=
CPUSchedulingPolicy=
Mas então recebo as seguintes mensagens em 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:
Pergunta:
Parece que desarmar opções como essa não é permitida. Eu também tentei usar um par de aspas vazias (por exemplo IOSchedulingClass=""
). Qual seria a forma correta de fazer isso? Eu sei que posso simplesmente substituir todo o arquivo de unidade, mas prefiro não mascarar nenhuma atualização posterior do arquivo de unidade empacotado, se possível.
Para referência, a página de systemd.exec(5)
manual sugere que deve haver alguma maneira de fazer isso:
Se a string vazia for atribuída a essa opção, todas as atribuições anteriores a IOSchedulingClass= e IOSchedulingPriority= não terão efeito.
Isso soa como um bug, mas eu tentaria
para contornar isso. Esses são os valores padrão, retirados das páginas de manual
ioprio_set
e .sched_setscheduler
É claro que você também pode substituir todo o arquivo de unidade colocando um com o mesmo nome em
/etc/systemd/system/
. É sensato evitar fazer isso, pois certamente é mais trabalho de manutenção (embora você provavelmente possa roteirizá-lo como parte da compilação do contêiner).