Digamos que eu tenha um tipo de unidade de serviço systemd que contém o seguinte Wants=
e as After=
instruções:
Wants=foo.service
After=foo.service
Eu realmente preciso especificar o foo.service
on Wants=
se ele já estiver ativado After=
? Ou talvez Wants=foo.service
seja necessário porque se nenhuma unidade especificar o foo.service
as Wants=
ou Requires=
, então o foo.service
não será iniciado?
Depende, ambos são possíveis, ambos fazem alguma coisa, mas têm um efeito distinto, então você deve manter o
Wants=
nos casos em que deseja garantir que afoo.service
unidade seja iniciada sempre que sua outra unidade for iniciada.Se você tiver apenas uma dependência de ordenação, como
After=foo.service
, isso significa apenas que, se ambas as unidades estiverem sendo iniciadas (na mesma transação), o systemd iniciaráfoo.service
primeiro (e aguardará até que seja iniciado completamente) antes de iniciar a unidade atual.Isso é útil quando você não sabe necessariamente se
foo.service
está habilitado ou não, seu serviço funciona de qualquer maneira, mas sefoo.service
estiver habilitado, você gostaria que ele fosse iniciado antes do seu serviço.Sim, está correto. As diretivas
After=
eBefore=
são diretivas somente de ordenação, então elas não puxam a outra unidade, apenas afetam a ordenação se a unidade já estiver sendo iniciada por outros meios (geralmente sendo ela mesma habilitada diretamente, ou possivelmente através de uma dependênciaWants=
ou de um terceiroRequires=
unidade.)