Como posso fazer uma modificação em um .service e mantê-lo persistente? [duplicado]

7

Eu tenho um trecho do Debian em que estou executando transmission-daemon como um serviço.

Mantenho meus arquivos semeados em uma unidade de disco rígido USB externa montada em /mnt/external-disk . Esse disco tem um sistema de arquivos ext4 e eu mapeei em /etc/fstab por uuid.

O problema é:

Quando o serviço transmission-daemon inicia na inicialização, ele não verifica se o sistema de arquivos externo já está montado para que não encontre os arquivos nele, e eu recebo um erro de dados e os arquivos torrent não são propagados, mas o serviço começa.

Para resolver esse problema, verifiquei a documentação de systemd e descobri o que estava faltando:

A linha RequiresMountsFor= na seção [Unit] do arquivo transmission-daemon.service está localizada na árvore abaixo de /lib/systemd/ . Depois que eu adicionei essa linha com o caminho do ponto de montagem /mnt/external-disk o problema desapareceu e o serviço estava funcionando bem. Se eu reinicializei a máquina, o serviço estava funcionando e os arquivos foram semeados.

Isso funcionou até eu ter um apt-get dist-upgrade onde o pacote transmission-daemon estava envolvido e depois que ele parou. Então, verifiquei o transmission-daemon.service e descobri que a modificação que fiz estava faltando.

Eu adicionei a linha RequiresMountsFor= outra vez com o caminho correto, e o problema foi corrigido novamente.

Minha pergunta é: como posso tornar essa modificação persistente?

    
por D'Arcy Nader 22.01.2018 / 11:33

2 respostas

15

Você deve substituir a unidade por uma unidade em /etc . A maneira mais fácil de fazer isso é usar systemctl edit :

sudo systemctl edit transmission-daemon

abrirá um editor e permitirá que você crie um trecho de substituição.

Um trecho de substituição garante que as futuras alterações na unidade do pacote (em /lib ) sejam levadas em conta: a referência será a unidade do pacote, com suas substituições aplicadas na parte superior. Tudo o que você precisa para usar isso no seu caso é um arquivo .conf em /etc/systemd/system/transmission-daemon.service.d/ , contendo apenas a seção e a linha RequiresMountsFor . systemctl edit fará isso para você, criando um arquivo override.conf no local apropriado.

Como alternativa, você pode copiar a /lib/systemd/system/transmission-daemon.service unit completa para /etc/systemd/system e editá-la. Novamente, systemctl edit pode cuidar disso para você, com a opção --full .

Procure o "Exemplo 2. Substituindo as configurações do fornecedor" na systemd.unit documentação para detalhes.

    
por 22.01.2018 / 11:36
4

Copie-o para /etc/systemd (ou um subdiretório apropriado de /etc/systemd ) e modifique a cópia.

/lib/systemd é para arquivos de unidade empacotados. Eles serão sobrescritos quando o systemd (ou qualquer pacote que os forneça) for atualizado.

/etc/systemd é para você e para arquivos de unidade personalizados. Os arquivos da unidade que você colocar aqui irão sobrescrever o arquivo fornecido pelo pacote e não serão substituídos na atualização.

    
por 22.01.2018 / 11:36

Tags