Bem, o init não pode realmente saber por si mesmo quais arquivos um determinado serviço precisa, portanto, "este serviço usa dependências / var" ainda precisam ser declarados em algum lugar de qualquer maneira .
Claro, isso deve ser feito pelos desenvolvedores & Empacotadores, não por você. Por exemplo, o systemd-random-seed.service
já mencionado tem todas as dependências necessárias:
$ systemctl cat systemd-random-seed # /usr/lib/systemd/system/systemd-random-seed.service # This file is part of systemd. ... DefaultDependencies=no RequiresMountsFor=/var/lib/systemd/random-seed ...
Portanto, no seu caso, a "alternativa superior" é usar um bind mount no lugar do symlink. Isso se encaixará naturalmente nas dependências da unidade .mount do systemd, ao mesmo tempo em que fornece uma funcionalidade idêntica a um symlink.
Ou seja, se você tiver uma montagem de ligação em /var
, todas as unidades que já dependem de var.mount
dependerão automaticamente (indiretamente) de home.mount
.
# /etc/fstab /home/var /var none bind 0 0
(Se isso não for aceitável, talvez compilar uma versão systemd personalizada com a dependência hackeada satisfaria melhor os seus 'requisitos'.)
Se algumas de suas unidades de serviço não tiverem dependências adequadas, é outra opção - você pode transformar /var
em automount usando o suporte autofs4 do systemd.
Com montagens automáticas, qualquer processo que tente acessar arquivos em / var será bloqueado até que o sistema de arquivos seja montado. Assim, uma 'dependência' global é criada sem ter que editar unidades de serviço individuais.
Para isso, adicione a opção x-systemd.automount
ao fstab. (Ou, se preferir var.mount
over fstab, crie também um var.automount
correspondente.)
# /etc/fstab /home/var /var none bind,x-systemd.automount 0 0
É claro que isso novamente requer que /var
seja uma montagem de bind em vez de um symlink.