Espera para iniciar o daemon de Transmissão até que a unidade USB tenha sido montada?

4

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 do caminho de download existir - neste caso, em uma unidade USB que é montada automaticamente pelo sistema em /media/Elements/[...] sem nenhuma configuração manual feita por mim. Eu não editei fstab .

Depois de tentar essa resposta sem sucesso, estou pensando se há alguma outra maneira de resolver isso? O que eu 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 de transmission após cada reinicialização. daemon-reload silencia até a próxima reinicialização.

Esta questão é relacionado, mas tem a ver com fstab montagens. Eu preferiria resolvê-lo sem fstab, se possível, já que 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
    
por Andreas 05.05.2018 / 02:22

1 resposta

4

EDIT : Acontece que minha primeira abordagem não funcionou como esperado. Uma seção [Install] em um arquivo de substituição realmente não funciona e RequiresMountsFor= parece funcionar apenas para montagens que são declaradas no 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 volume /media/Elements seja montado, use o ConditionPathIsMountPoint= directiva que irá verificar e impedir que a unidade inicie a menos que esse diretório seja montado.

# /etc/systemd/system/transmission.service.d/override.conf

[Unit]
ConditionPathIsMountPoint=/media/Elements

(OBSERVAÇÃO: você pode usar o comando systemctl edit transmission.service para abrir um editor neste arquivo de substituições).

Para acionar o início de transmission.service sempre que o USB for montado, você precisará adicionar um link simbólico a ele em um diretório .wants/ da unidade de montagem. (Idealmente, isso seria cuidado por uma seção [Install] , mas parece não funcionar em um arquivo de substituição.)

Crie manualmente com estes dois comandos:

$ sudo mkdir -p /etc/systemd/system/media-Elements.mount.wants/
$ sudo ln -sf /lib/systemd/system/transmission.service /etc/systemd/system/media-Elements.mount.wants/

Depois disso, monte /media/Elements e veja Transmissão começar ...

Resposta original abaixo ...

Assim, a diretiva After= só afeta a ordem, se ambas as unidades são enfileiradas para serem iniciadas, então esta será iniciada após a conclusão da outra, mas não acionará o início da outra. Você precisa Requires= para isso.

Mas, para montagens, há um ótimo atalho em RequiresMountsFor= , que pode levar as montadas como caminhos.

Você provavelmente também deseja configurar isso para que esta unidade seja iniciada quando a unidade USB for montada. Você pode acionar isso usando WantedBy= (no [Install] seção) e referindo-se à unidade .mount daqui. Depois de configurá-lo e usar systemctl enable para criar o relacionamento "Procurado", o início desta unidade será (também) acionado quando a unidade USB for montada (se isso for feito posteriormente e não durante a inicialização).

Colocando tudo junto:

# /etc/systemd/system/transmission.service.d/override.conf

[Unit]
RequiresMountsFor=/media/Elements "/media/Vault 13" "/media/Black Mesa"

[Install]
WantedBy=media-Elements.mount
WantedBy=media-Vault\x2013.mount
WantedBy=media-Black\x20Mesa.mount

Em seguida, ative esta unidade, que criará links simbólicos sob os diretórios *.mount.wants/ (os nomes exatos dos links simbólicos serão impressos em systemctl enable output):

# systemctl enable transmission.service

Isso deve resolver isso.

Não está claro para mim por que você está listando as três montagens, já que no texto da pergunta você sugere apenas /media/Elements é usado para armazenar os downloads da Transmissão ... Se esse é realmente o caso, você provavelmente poderia remover a outra dois e manter apenas as referências ao "Elementos".

( OBSERVAÇÃO : Eu não testei tudo isso antes de postar, mas estou confiante de que isso funcionará. Se por algum motivo isso não acontecer, me deixe um comentário com mais detalhes, Fico feliz em trabalhar com você para descobrir isso.)

    
por 05.05.2018 / 07:13