Configure o serviço systemd para executar após o fstab mount

18

Estou trabalhando em um script systemd .service que deve ser iniciado após um local de rede CIFS ser montado via /etc/fstab to /mnt/ na inicialização.

O script aguarda que um script de dependência do OpenVPN seja iniciado primeiro, mas eu também quero que ele espere 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

Sinto muito se essa pergunta é trivial. Procurei on-line e tentei adicionar systemd.mount à linha: After=network.target vpn-launch.service systemd.mount , mas não deu os resultados que eu esperava.

    
por Winterflags 02.12.2015 / 18:45

3 respostas

30

a CIFS network location is mounted via /etc/fstab to /mnt/ on boot-up.

Não, não é. Faça isso direito, e o resto se encaixa naturalmente.

A montagem é tratada por uma unidade de montagem systemd gerada que terá o nome de algo como mnt-wibble.mount . Você pode ver seu nome real na saída do comando systemctl . Você pode olhar em detalhes como qualquer outra unidade com systemctl status .

Muito simplesmente, então: você precisa solicitar que sua unidade seja iniciada após o início dessa unidade de montagem.

After=network.target vpn-launch.service mnt-wibble.mount

Leitura adicional

por 05.12.2015 / 16:28
14

Desculpe, mas não posso comentar ainda.

Como o JdeBP disse, você deve estar fazendo pedidos na montagem do sistema de arquivos. Você pode prever o nome da unidade de montagem ou, alternativamente, você pode usar (na seção de unidade):

RequiresMountsFor=/absolute/path/of/mount

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 do CentOS 7 nos últimos 6 meses.

    
por 11.12.2015 / 19:22
10

Embora ambas as respostas estejam corretas, quero acrescentar meus dois centavos à discussão, porque, quando a procurei, faltavam algumas instruções e exemplos de como proceder.

  1. Adicione o sistema de arquivos a /etc/fstab
  2. Digite mount -a , que monta todos os sistemas de arquivos mencionados no fstab
  3. Procure a unidade systemd que foi gerada com:

    systemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'

    (deve retornar algo que termine com .mount )
  4. Adicione a unidade de montagem encontrada à instrução After= no arquivo *.service

Este é um exemplo de como iniciar o serviço my-daemon na inicialização, mas depois que a rede estiver pronta, um compartilhamento CIFS será montado em /mnt/cifs e o serviço vpn-launch foi iniciado:

/ etc / fstab

//servername/sharename /mnt/cifs cifs defaults,some,other,options 0 0


/etc/systemd/system/my-daemon.service

[Unit]
Description=Launch My Daemon
Requires=vpn-launch.service
After=network.target vpn-launch.service mnt-cifs.mount

[Service]
ExecStart=/path/to/my-daemon

[Install]
WantedBy=multi-user.target

Não se esqueça de ativar o serviço de forma que ele seja iniciado na inicialização: systemctl enable my-daemon

Observe que isso funciona também para outros sistemas de arquivos (NFS, HDDs etc.).

Como já foi mencionado, ambas as respostas estão corretas e eu encorajo todos a lê-las, mas para mim alguns exemplos poderiam ter me poupado algum tempo.

    
por 20.12.2017 / 17:06