Eu tenho um trecho Debian onde estou rodando transmission-daemon
como um serviço.
Eu mantenho meus arquivos propagados em uma unidade de disco rígido USB externa montada em /mnt/external-disk
. Este disco tem um ext4
sistema de arquivos e eu o /etc/fstab
mapeei por uuid.
O problema é:
Quando o serviço é transmission-daemon
iniciado na inicialização, ele não verifica se o sistema de arquivos externo já está montado, portanto não encontra os arquivos nele, e recebo um erro de dados e os arquivos torrent não são propagados, mas o serviço é iniciado.
Para resolver esse problema, verifiquei a systemd
documentação e descobri o que estava faltando:
A linha RequiresMountsFor=
na [Unit]
seção do transmission-daemon.service
arquivo está localizada na árvore abaixo /lib/systemd/
. Depois que 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 reiniciasse a máquina, o serviço estava funcionando e os arquivos foram propagados.
Isso funcionou até que eu tive um apt-get dist-upgrade
onde o pacote transmission-daemon
estava envolvido e depois parou. Então eu verifiquei o transmission-daemon.service
, e descobri que a modificação que fiz estava faltando.
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?
Você deve substituir a unidade por uma unidade em
/etc
. A maneira mais fácil de fazer isso é usarsystemctl edit
:abrirá um editor e permitirá que você crie um snippet de substituição.
Um snippet de substituição garante que alterações futuras na unidade do pacote (em
/lib
) sejam levadas em consideração: a referência será a unidade do pacote, com suas substituições aplicadas na parte superior. Tudo que você precisa para usar isso no seu caso é um.conf
arquivo em/etc/systemd/system/transmission-daemon.service.d/
, contendo apenas a seção e aRequiresMountsFor
linha.systemctl edit
fará isso por você, criando umoverride.conf
arquivo no local apropriado.Como alternativa, você pode copiar a
/lib/systemd/system/transmission-daemon.service
unidade completa/etc/systemd/system
e editá-la. Novamente,systemctl edit
podemos cuidar disso para você, com a--full
opção.Procure “Exemplo 2. Substituindo as configurações do fornecedor” na
systemd.unit
documentação para obter detalhes.Copie-o para
/etc/systemd
(ou um subdiretório apropriado de/etc/systemd
) e modifique a cópia./lib/systemd
é para arquivos unitários empacotados. Eles serão substituídos quando o systemd (ou qualquer pacote que os forneça) for atualizado./etc/systemd
é para você e para arquivos de unidade personalizados. Os arquivos de unidade que você colocar aqui substituirão o arquivo fornecido pelo pacote e não serão substituídos na atualização.