Muitos scripts sysv init usavam um arquivo correspondente /etc/default
para permitir que o administrador o configurasse. Trabalhos iniciados podem ser modificados usando .override
arquivos. Como substituir ou configurar unidades systemd, agora que systemd é o padrão no Ubuntu?
109
ExecStart=
entrada com um espaço em branco, você não pode colocar um comentário depois da seguinte forma:ExecStart= # Empty line to clear previous entries.
Isso será tomado como outraExecStart=
entrada e adicionado à lista. PS. Não pude comentar a resposta de muru por causa de minha baixa reputação.Respostas:
systemd
as unidades não precisam obedecer aos arquivos/etc/default
.systemd
é facilmente configurável, mas requer que você conheça a sintaxe dos arquivos da unidade systemd.Os pacotes enviam arquivos de unidade normalmente
/lib/systemd/system/
. Estes não devem ser editados. Em vez disso,systemd
permite substituir esses arquivos criando arquivos apropriados no/etc/systemd/system/
.Para um determinado serviço
foo
, o pacote forneceria/lib/systemd/system/foo.service
. Você pode verificar seu status usandosystemctl status foo
ou visualizar seus logs usandojournalctl -u foo
. Para substituir algo na definição defoo
, faça:Isso cria um diretório com o
/etc/systemd/system
nome da unidade e umoverride.conf
arquivo nesse diretório (/etc/systemd/system/foo.service.d/override.conf
). Você pode adicionar ou substituir configurações usando este arquivo (ou outros.conf
arquivos/etc/systemd/system/foo.service.d/
).Substituindo argumentos de comando
Veja o
getty
serviço, por exemplo. Digamos que eu queira ter o logon TTY2 automático para meu usuário (isso não é aconselhável, mas apenas um exemplo). O TTY2 é executado pelogetty@tty2
serviço (tty2
sendo uma instância do modelo/lib/systemd/system/getty@service
). Para fazer isso, eu tenho que modificar ogetty@tty2
serviço.Em particular, eu tenho que mudar a
ExecStart
linha, que atualmente é:Para substituir isso, faça:
E adicione:
Observe que:
ExecStart
antes de defini-lo novamente, já que é um cenário aditivo, semelhante aAfter
,Environment
(como um todo, não per-variável) eEnvironmentFile
, e oposição a substituição de configurações de comoRestartSec
ouType
.ExecStart
pode ter várias entradas apenas paraType=oneshot
serviços.ExecStart
está na[Service]
seção, então minha substituição também deve ser incluídaExecStart
na[Service]
seção. Muitas vezes, ver o arquivo de serviço real usandosystemctl cat
indica o que você precisa substituir e em qual seção ele está.Geralmente, se você editar um arquivo de unidade systemd, para que ele entre em vigor, será necessário executar:
No entanto,
systemctl edit
isso é feito automaticamente por você.Agora:
E se eu fizer:
e pressione CtrlAltF2, pronto! Vou entrar na minha conta nesse TTY.
Como eu disse antes,
getty@tty2
é uma instância de um modelo. Então, e se eu quisesse substituir todas as instâncias desse modelo? Isso pode ser feito editando o próprio modelo (removendo o identificador da instância - neste casotty2
):Substituindo o ambiente
Um caso de uso comum de
/etc/default
arquivos é definir variáveis de ambiente. Geralmente,/etc/default
é um script de shell, então você pode usar construções de linguagem de shell nele. Comsystemd
, no entanto, este não é o caso. Você pode especificar variáveis de ambiente de duas maneiras:Via um arquivo
Digamos que você configurou as variáveis de ambiente em um arquivo:
Em seguida, você pode adicionar à substituição:
Em particular, se o seu
/etc/default/grub
contiver apenas atribuições e nenhuma sintaxe do shell, você poderá usá-lo como oEnvironmentFile
.Via
Environment
entradasO procedimento acima também pode ser realizado usando a seguinte substituição:
No entanto, isso pode ser complicado com várias variáveis, espaços etc. Veja uma das minhas outras respostas para um exemplo de uma instância desse tipo.
Leitura adicional
Por meio desse mecanismo, fica muito fácil substituir
systemd
unidades e desfazer essas alterações (simplesmente removendo o arquivo de substituição). Essas não são as únicas configurações que podem ser modificadas.Os seguintes links seriam úteis:
systemd
systemd
páginas de manual , em particular, as páginas de manualsystemd.unit
esystemd.service
fonte
systemd.service(5)
manual, seção sobreExecStart
: "A menos que Type = oneshot, seja necessário exatamente um comando. Quando Type = oneshot é usado, zero ou mais comandos podem ser especificados. Comandos podem ser especificados fornecendo várias linhas de comando na mesma diretiva ou, alternativamente, esta diretiva pode ser especificada mais de uma vez com o mesmo efeito. Se a sequência vazia for atribuída a esta opção, a lista de comandos a ser iniciada será redefinida, as atribuições anteriores dessa opção não terão efeito. "sudo rm
substituir o arquivo esystemctl daemon-reload
, em seguida ,systemctl edit
substituir todos os itens da substituição por comentários. Os comentários nos arquivos de serviço começam com#
.systemctl revert foo