A RequiresMountsFor=
opção em um arquivo de unidades systemd requer que a montagem para os caminhos especificados esteja no lugar antes que a unidade seja iniciada.
Até onde eu sei, argumentos podem ser um ponto de montagem, bem como qualquer diretório abaixo desse ponto de montagem. Por exemplo, se os arquivos de zona para BIND estiverem em /etc/bind
e /etc
estiverem em seu próprio sistema de arquivos, RequiresMountsFor=/etc
ou RequiresMountsFor=/etc/bind
atingirão o resultado desejado: BIND não iniciará até que /etc
tenha sido montado e, portanto, /etc/bind
esteja disponível.
Agora estou imaginando o que aconteceria se RequiresMountsFor=
eu especificasse um caminho inexistente. Por exemplo, if fstab
tem entradas para /
and /etc
mas nada abaixo de /etc
, and RequiresMountsFor=/etc/this/path/does/not/exist
refere-se a um caminho que não existe em /etc
.
Isso faria com que a unidade esperasse para /etc
ser montada (já que é o último ponto de montagem no caminho)? Se sim, a unidade iniciaria assim que /etc
fosse montada ou falharia porque /etc/this/path/does/not/exist
não foi encontrada?
Isso pode se tornar relevante onde as unidades aceitam parâmetros, como [email protected]
, que tem RequiresMountsFor=/etc/postgresql/%I /var/lib/postgresql/%I
. Se os arquivos de dados de um cluster forem movidos para longe, o segundo caminho não apontará para lugar nenhum se a unidade for invocada naquele cluster.
RequiresMountsFor=
é uma tradução direta paraRequires=
as unidades .mount correspondentes, com o systemd verificando cada prefixo possível (/
,/etc
,/etc/postgresql
, ...) para a existência de uma.mount
unidade correspondente e adicionando-o às dependências Requires; prefixos que não correspondem a uma unidade .mount são ignorados.Não há nenhuma outra verificação além dessa, em particular nenhuma tradução para condições de unidade. Se você precisar verificar a existência de um caminho, use
ConditionPathExists=
orAssertPathExists=
.