Iniciar / parar uma unidade de usuário sempre que um dispositivo for montado / desmontado

1

Eu movi a maioria dos meus maiores arquivos para um disco removível, alguns desses arquivos também são torrents que eu gostaria de propagar. Eu uso deluged como meu cliente de torrent que é iniciado pelo systemd no meu usuário. Agora, a unidade pode ser conectada no momento da inicialização ou montada em uma data posterior, o que, é claro, faz com que a inundação seja confusa e queixam-se de que os arquivos são incompatíveis. A solução mais ingênua é apenas iniciar o serviço inutilizado após o dispositivo ser montado e é isso que planejo fazer.

Eu já vi estas respostas que sugerem usando RequiresMountsFor e de acordo com systemctl --user show deluged parece fazer o que eu quero:

After=basic.target -.slice home.mount network-online.target media-braiam-AA64B45
RequiresMountsFor=/media/braiam/AA64B45A64B42AC9 /home/braiam

Agora, isso permite que a unidade seja iniciada se eu tiver montado o dispositivo, mas não interrompe a unidade quando o dispositivo está sendo desmontado, nem parece iniciar o serviço quando o dispositivo está sendo montado.

Em resumo:

  • O serviço é iniciado apenas se o dispositivo estiver montado ou puder ser montado
  • O serviço será interrompido se o dispositivo estiver sendo desmontado
  • O serviço será iniciado se o dispositivo estiver montado
  • O dispositivo permanecerá montado se o serviço for interrompido.

Isso é o que eu consegui:

[Unit]
Description=Deluge Bittorrent Client Daemon
After=network-online.target
RequiresMountsFor=/media/braiam/id/
BindsTo=media-braiam-id.mount

Por enquanto, isso interrompe o serviço quando está sendo desmontado, é iniciado somente se o ponto de montagem puder ser montado e tentar montar o dispositivo. Não montará o dispositivo, pois somente o root pode montá-lo (acho que se eu instalar uma unidade para o sistema, isso será possível). Ele não inicia se o ponto de montagem se tornar disponível, no entanto. Como faço para conseguir o que quero?

    
por Braiam 08.01.2017 / 18:48

1 resposta

1

Você precisa de BindsTo = para iniciar e parar as duas unidades juntas. Mas lembre-se que o systemd tende a paralelizar. Você também precisa de After = para que o mount esteja totalmente ativo antes de iniciar o serviço. Também tem o efeito oposto: o serviço deve ser totalmente interrompido antes que a montagem possa ser removida.

[Unit]
Description=Deluge Bittorrent Client Daemon
After=network-online.target
BindsTo=media-braiam-id.mount
After=media-braiam-id.mount

Pergunta Simlar sobre estouro de pilha: link

    
por 18.10.2018 / 22:35

Tags