Como sobrescrever as configurações do arquivo de unidade do systemd?

4

Instalei o MySQL no meu servidor Arch Linux. Mudei o diretório de dados para um local em / home, onde meu volume RAID está montado. Notei que o mysqld não irá iniciar nesta configuração por padrão, já que a unidade systemd contém a configuração ProtectHome=true .

Eu quero sobrescrever apenas essa configuração. Eu não quero re-especificar o ExecStart ou comandos similares, caso eles mudem quando o pacote for atualizado.

Eu tentei criar um arquivo simples em /etc/systemd/system chamado mysqld.service e adicionei apenas estas linhas:

[Service]
ProtectHome=false

Isso não funciona, já que o serviço em / etc substitui , não substitui o serviço do sistema.

Existe uma maneira de substituir as configurações nos arquivos da unidade do systemd dessa forma sem modificar diretamente os arquivos em / usr / lib / systemd / system? (que é o que eu fiz por enquanto como uma correção temporária, embora isso acabe sendo revertido se o pacote for atualizado)

    
por fdmillion 17.10.2017 / 06:01

2 respostas

6

Você pode substituir um arquivo de unidade do sistema usando

systemctl edit mysqld.service

Todas as declarações feitas no arquivo de substituição terão prioridade.

    
por 17.10.2017 / 06:17
2

systemctl edit criará um < um arquivo de href="https://www.freedesktop.org/software/systemd/man/systemd.unit.html"> drop-in onde você pode substituir a maioria das configurações, mas esses arquivos têm alguns detalhes vale a pena mencionar:

Note that for drop-in files, if one wants to remove entries from a setting that is parsed as a list (and is not a dependency), such as AssertPathExists= (or e.g. ExecStart= in service units), one needs to first clear the list before re-adding all entries except the one that is to be removed.

#/etc/systemd/system/httpd.service.d/local.conf
[Unit]
AssertPathExists=
AssertPathExists=/srv/www

Dependencies (After=, etc.) cannot be reset to an empty list, so dependencies can only be added in drop-ins. If you want to remove dependencies, you have to override the entire unit.

Para substituir a unidade inteira, use systemctl edit --full , isso fará uma cópia em /etc , se ainda não houver nenhuma, e permitirá a edição.

Veja também Anulações de exclusão do Systemd

    
por 10.09.2018 / 19:49

Tags