systemd é um gerenciador de tarefas. A página de manual não é muito precisa sobre como as coisas funcionam.
Quando você inicializa, o que o systemd faz é criar uma transação composta por trabalhos para o trabalho âncora (por exemplo, iniciar trabalho para default.target). O que todas essas dependências e relacionamentos fazem é definir como e quais tarefas serão acionadas. A encomenda define em quais trabalhos todos os outros trabalhos aguardarão. Portanto, a unidade default.target está no centro de tudo isso, e é por isso que ao ativar as unidades, você usa uma dependência reversa que, através do systemctl enable, cria um link simbólico do sistema de arquivos que indica uma dependência direta que systemd pode seguir (também porque você precisa de links simbólicos do sistema de arquivos no diretório primeiro lugar). Semelhante é quando você inicia manualmente alguma unidade, essa unidade é âncora e a transação é calculada nela.
Não entrando em muitos detalhes, explicarei o que Requer = e Depois = faz.
Requer = fará com que o systemd inicie um trabalho inicial para a unidade necessária quando você iniciar um trabalho inicial (explicitamente ou através de uma dependência: não há distinção internamente). Ele também tem a propriedade de acionar um trabalho de interrupção em você quando esta unidade é parada (nota: parada, não diminuindo sozinha) ou reiniciada. Isso significa que, se alguma dependência / systemctl fizer com que ela pare / reinicie, você também irá parar / reiniciar. No entanto, se tudo der errado, você não irá parar, pois não havia emprego, e a mudança de estado aconteceu sem o envolvimento do systemd. É aqui que você usaria BindsTo = (semelhante às unidades de dispositivo, que podem ficar inativas sem o envolvimento do systemd, por razões óbvias).
Agora, o uso de After = é recomendado, pois Requer = sozinho é atrevido para o que faz: cancele o necessário se o trabalho inicial falhar. Esse cancelamento, no entanto, funciona apenas em trabalhos errados, ou seja, se a outra unidade não definir a ordem, o systemd será acionado em paralelo e se o trabalho inicial terminar antes que o trabalho inicial falhe, ele não será cancelado (na verdade, não pode ser cancelado) . O uso de Após = significa que outro trabalho fica aguardando até o trabalho inicial da unidade necessária terminar e, dependendo do resultado, se falhar, o trabalho inicial de espera da sua unidade é cancelado com o resultado do trabalho JOB_DEPENDENCY (por que você usa amarelo [DEPEND] na inicialização para esses casos). Portanto, esse efeito de invalidação é indeterminado sem o uso de After =.
É por isso que usar Wants = sem After = é bom se você não quiser esperar pela inicialização da outra unidade: como não há invalidação por lá, não há corrida. Nesse caso, não passa de um mecanismo de sincronização.
Além disso, você também pode ativar ambos na inicialização, e não exigir um ao outro, e apenas definir a ordem, nesse caso, quando ambos forem puxados como parte da mesma transação, eles serão solicitados (ou se o trabalho para o outro for acionado enquanto o trabalho da unidade que deseja executar estiver em execução, ele primeiro esperará sua conclusão, nas transações).
Agora, se não houver trabalho, o pedido não terá efeito para a referida unidade. No entanto, geralmente há um trabalho, como conseqüência do uso de dependências como Requer = e Quer =, ou ambos são puxados de cada vez e definem algumas ordens; nesse caso, eles esperam no (s) trabalho (s) da outra unidade.