Eu estou trabalhando em um systemd
.service
script que é suposto começar após um local de rede CIFS é montado por meio /etc/fstab
de /mnt/
no boot-up.
O script espera que um script de dependência do OpenVPN seja iniciado primeiro, mas também quero que ele aguarde a conclusão da montagem.
/etc/systemd/system/my-daemon.service :
[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service
Tentei adicionar systemd.mount
à linha:, After=network.target vpn-launch.service systemd.mount
mas não deu os resultados que eu esperava.
systemd-remount-fs
à suaAfter
lista?Respostas:
Não não é. Faça isso direito, e o resto se encaixa naturalmente.
A montagem é manipulada por uma unidade de montagem systemd (gerada) que será chamada de algo como
mnt-wibble.mount
. Você pode ver seu nome real na saída dosystemctl list-units --type=mount
comando. Você pode ver em detalhes como qualquer outra unidadesystemctl status
.Muito simplesmente, então: você precisa solicitar que sua unidade seja iniciada depois que a unidade de montagem for iniciada.
Leitura adicional
fonte
Desculpe, mas ainda não posso comentar.
Como o JdeBP disse, você deve solicitar o suporte do sistema de arquivos. Você pode prever o nome da unidade de montagem ou, alternativamente, pode usar (na seção da unidade):
Esta opção cria as dependências para as unidades * .mount apropriadas para tornar o caminho acessível antes de iniciar o serviço. Pode não estar em todas as versões do systemd, mas eu tenho usado em uma máquina CentOS 7 nos últimos 6 meses.
fonte
RequiresMountsFor=
Vem com seu próprio conjunto de advertências. Com o bug do RedHat nº 1088057 e Chris Siebenmann em mãos, você deve responder a superuser.com/questions/988734 . Também é uma montagem CIFS nesta questão. Mas a implicação é que éauto
, felizmente.Embora ambas as respostas estejam corretas, quero acrescentar meus dois centavos à discussão, porque, quando a procurei, estava perdendo algumas instruções e exemplos de como proceder.
/etc/fstab
mount -a
que monta todos os sistemas de arquivos mencionados no fstabsystemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'
(deve retornar algo que termina com
.mount
)After=
instrução no*.service
arquivoAqui está um exemplo de como iniciar o
my-daemon
serviço na inicialização, mas após a rede estar pronta, um compartilhamento CIFS é montado em/mnt/cifs
e ovpn-launch
serviço foi iniciado:/ etc / fstab
Nota: Você pode querer adicionar
nofail
às suas opções fstab (por exemplo, ao usar uma unidade externa). Caso contrário, sua máquina não inicializará se o dispositivo não estiver conectado. Veja o artigo fstab do ArchWiki/etc/systemd/system/my-daemon.service
Não se esqueça de ativar o serviço para que ele seja iniciado na inicialização:
systemctl enable my-daemon
Observe que isso funciona para outros sistemas de arquivos (NFS, HDDs etc.) também.
Como já mencionado, ambas as respostas estão corretas e eu incentivo todos a lê-las, mas para mim alguns exemplos teriam me poupado algum tempo.
Atualização (25/06/2019):
mnt-cifs.mount
àRequires=
lista que causamy-daemon.service
falha na inicialização quando a montagem cifs não foi montada com sucessofonte
systemctl list-units --type=mount
?@ bm-bergmotte: obrigado pela sua instrução que me ajudou muito. Para mim está funcionando, se eu colocar
Se eu não colocar "mnt-cifs.mount" dentro de "Requer" (e nesta ordem), ele funcionará para reinicialização / inicialização, mas o serviço será iniciado assim mesmo, se o dispositivo não estiver montado. Depois de colocá-lo adicionalmente dentro de "" Requer ", o serviço monta o dispositivo antes de iniciá-lo, se o dispositivo não estiver montado.
fonte
After=
apenas dita a ordem.Requires=
torna obrigatório que a montagem CIFs esteja presente (consulte a resposta de Sufiyan Ghori nessa). Vou atualizar minha resposta.