Um script systemd para montagem remota do s3ql FUSE

1

Acho muito interessante o systemd, mas como eu o usaria para escrever um script para montar um s3ql sistema de arquivos? Por exemplo, o desenvolvedor do s3ql fornece uma configuração de inicialização que faz o trabalho.

Especificamente, na inicialização, o mount.s3ql deve ser executado (como o usuário desejado, pois este é um sistema de arquivos FUSE), e no shutdown, umount.s3ql deve ser executado. Além disso, e se quisermos fsck.s3ql o sistema de arquivos antes da montagem ou executar uma etapa de sincronização do Unison após a inicialização e antes do desligamento (todas as modificações que fiz em meu próprio pessoal).

À primeira vista, acho que eu gostaria de configurar uma unidade de montagem no systemd, mas parece que o serviço unit na verdade se encaixa melhor com os comandos de inicialização pre e post exec. (Todas as páginas man estão disponíveis aqui .)

E em que .target eu dependo para codificar a dependência em uma conexão de rede?

    
por JKnight 15.02.2012 / 20:47

1 resposta

1

Primeiramente, parece que, para mount.s3ql e umount.s3ql , uma unidade .mount genérica pode ser apropriada. Tanto o comando mount quanto o systemd suportam mount.fstype auxiliares durante a montagem. No entanto, o auxiliar deve suportar o método padrão -o options de opções de passagem, o que s3ql não oferece. Além disso, aplicam-se as mesmas limitações como em / etc / fstab .

Assim, você pode realmente ser melhor com uma unidade .service que chama os comandos desejados:

[Unit]
[email protected]
[email protected]

[Service]
Type=forking
Environment=AUTHFILE=/path/to/authinfo2
ExecStart=/usr/sbin/mount.s3ql --authfile ${AUTHFILE} ${BUCKET} ${MOUNTPOINT}
ExecStop=/usr/sbin/umount.s3ql ${MOUNTPOINT}
TimeoutSec=5min

Como não existe uma maneira padrão de configurar redes, muito menos uma que realmente verifica se a conexão está realmente funcionando, não existe um alvo systemd padrão para o que você deseja. Há network.target , mas pode considerar-se iniciado quando a conexão ainda não está disponível.

Se você estiver usando o NetworkManager, sua distribuição pode ter incluído uma unidade que executa nm-online - por exemplo, o Arch chama NetworkManager-wait-online.service .

[Unit]
Require=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service
    
por 10.03.2012 / 11:46

Tags