A leitura de man 5 systemd.unit
e man 5 systemd.target
nos informa que os arquivos de unidade são usados para definir destinos, bem como todo o resto do sistema. Não há documentação específica sobre como criar um destino , por isso é difícil determinar como isso deve ser feito, mas não é muito diferente da criação de um serviço.
Ao criar seu destino, você precisará fazer links simbólicos para o diretório target.wants
do diretório de serviços systemd. Então você pode definir / inicializar o seu alvo. Veja como isso pode parecer, dado o seu exemplo.
/etc/systemd/system/foo.target
Este é o arquivo de unidade do alvo. Se graphical.target é tomado como exemplo, podemos criar nosso próprio alvo usando-o como base.
[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
Para explicar as opções tiradas dos manpages do systemd;
-
Description
- descreve o destino. Você deve entender -
Requires
- Dependências rígidas do alvo. Você deve deixar o sistema básico iniciar antes de iniciar seu próprio serviço (s) -
Wants
- dependências suaves. O alvo não requer que estes iniciem. -
Conflicts
- Se uma unidade tiver uma configuração de Conflitos em outra unidade, iniciar a primeira interromperá a última e vice-versa. -
After
- Botas após esses serviços -
AllowIsolate
- Realmente para você e seu ambiente. Detalhes estão disponíveis na manpagesystemd.unit(5)
/etc/systemd/system/foo.target.wants /
Este é o diretório onde você irá vincular os serviços que você cria / exige para o seu alvo. É equivalente à opção Wants=
no arquivo da unidade. Crie este diretório e crie links simbólicos assim; %código%. Isso cria um link simbólico de bar.service no diretório do sistema para o seu diretório foo.target.wants.
Acho que criar um arquivo de unidade para um serviço está fora do escopo desta resposta, e essa pergunta é definitivamente mais documentada, então deixarei isso de lado por enquanto. Quando você criar seu arquivo unitário, apenas crie uma ligação simbólica no diretório target.wants ou adicione-o à diretiva ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service
.