Estou executando o daemon de transmissão como um serviço systemd no OSMC. Ao abrir sua interface web de controle remoto após uma reinicialização, todas as transferências são quase sempre interrompidas com a mensagem "Erro: Nenhum dado encontrado! Certifique-se de que suas unidades estejam conectadas [...]".
Estou assumindo que isso ocorre porque a transmissão começa antes que o caminho de download exista - neste caso, em uma unidade USB que é montada automaticamente pelo sistema /media/Elements/[...]
sem nenhuma configuração manual feita por mim. Eu não editei fstab
.
Depois de tentar esta resposta sem sucesso, gostaria de saber se existe alguma outra maneira de resolver isso? O que fiz de acordo com essa resposta foi adicionar o seguinte em um override.conf
:
cat /etc/systemd/system/transmission.service.d/override.conf
[Unit]
After=media-Elements.mount
After=media-Vault\x2013.mount
After=media-Black\x20Mesa.mount
O arquivo de serviço:
$ cat /lib/systemd/system/transmission.service
[Unit]
Description=Transmission BitTorrent Daemon
After=udisks-glue.service
[Service]
User=osmc
Group=osmc
Type=notify
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/transmission-daemon -f --log-error --allowed *.*.*.*
[Install]
WantedBy=multi-user.target
Status do sistema:
$ systemctl status transmission
● transmission.service - Transmission BitTorrent Daemon
Loaded: loaded (/lib/systemd/system/transmission.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/transmission.service.d
└─override.conf
[...]
Vale a pena mencionar que recebo Warning: transmission.service changed on disk. Run 'systemctl daemon-reload' to reload units.
ao verificar o status transmission
após cada reinicialização. daemon-reload
silencia até a próxima reinicialização.
Esta questão está relacionada, mas tem a ver com montagens fstab. Eu preferiria resolvê-lo sem fstab, se possível, pois não quero tratar a unidade USB como permanentemente conectada.
Depois de tentar a resposta inicial:
$ systemctl cat --no-pager transmission.service
# Warning: transmission.service changed on disk, the version systemd has loaded is outdated.
# This output shows the current version of the unit's original fragment and drop-in files.
# If fragments or drop-ins were added or removed, they are not properly reflected in this output.
# Run 'systemctl daemon-reload' to reload units.
# /lib/systemd/system/transmission.service
[Unit]
Description=Transmission BitTorrent Daemon
After=udisks-glue.service
[Service]
User=osmc
Group=osmc
Type=notify
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/transmission-daemon -f --log-error --allowed *.*.*.*
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/transmission.service.d/override.conf
[Unit]
RequiresMountsFor=/media/Elements
[Install]
WantedBy=media-Elements.mount
EDIT : Acontece que minha primeira abordagem não funcionou como esperado. Uma
[Install]
seção em um arquivo de substituição realmente não funciona eRequiresMountsFor=
parece funcionar apenas para montagens declaradas em fstab. Portanto, estou propondo uma alternativa que realizará os mesmos efeitos, mas usando diretivas diferentes.Para evitar que a unidade seja iniciada, a menos que o
/media/Elements
volume esteja montado, use aConditionPathIsMountPoint=
diretiva que verificará isso e impedirá que a unidade seja iniciada, a menos que o diretório esteja montado.(OBSERVAÇÃO: você pode usar o
systemctl edit transmission.service
comando para abrir um editor neste arquivo de substituições.)Para acionar o início
transmission.service
sempre que o USB for montado, você precisa adicionar um link simbólico a um.wants/
diretório para a unidade de montagem. (Idealmente, isso seria resolvido por uma[Install]
seção, mas não parece funcionar a partir de um arquivo de substituição.)Crie-o manualmente com estes dois comandos:
Depois que estiver no lugar, monte
/media/Elements
e veja Transmission começar...Resposta original abaixo...
Então, a
After=
diretiva afeta apenas a ordenação, se ambas as unidades estiverem na fila para serem iniciadas, então esta será iniciada após a conclusão da outra, mas não aciona o início da outra. Você precisaRequires=
para isso.Mas para montarias, há um belo atalho em
RequiresMountsFor=
, que pode pegar as montarias como caminhos.Você provavelmente também deseja configurar isso para que esta unidade seja iniciada quando a unidade USB for montada. Você pode acioná-lo usando
WantedBy=
(na[Install]
seção) e referindo-se à.mount
unidade daqui. Depois de configurar e usarsystemctl enable
para criar o relacionamento "Procurado", a inicialização desta unidade será (também) acionada quando a unidade USB for montada (se isso for feito posteriormente e não durante a inicialização).Juntando tudo:
E ative esta unidade, que criará links simbólicos nos
*.mount.wants/
diretórios (os nomes exatos dos links simbólicos serão impressos nasystemctl enable
saída):Isso deve cuidar disso.
Não está claro para mim por que você está listando as três montagens, já que no texto da pergunta você sugere que apenas
/media/Elements
seja usado para armazenar downloads de transmissão ... Se for esse o caso, provavelmente você poderia remover as outras duas e manter apenas as referências para o "Elementos".( OBSERVAÇÃO : não testei tudo isso antes de postar, mas estou bastante confiante de que funcionará. Se, por algum motivo, não funcionar, deixe-me um comentário com mais detalhes, ficarei feliz em trabalhar com você para descobrir isso fora.)