Lendo man 5 systemd.unit
e man 5 systemd.target
informando que os arquivos de unidade são usados para definir destinos, bem como tudo o mais systemd. Não há documentação específica sobre como criar um destino , por isso é difícil determinar como deve ser feito, mas não é muito diferente da criação de um serviço.
Ao criar seu destino, você precisará criar links simbólicos para o target.wants
diretório a partir do diretório systemd services. Então você pode definir / inicializar 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 for tomado como exemplo, podemos criar nosso próprio destino 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
Explicar as opções retiradas das páginas de sistema do systemd;
Description
- descreve o alvo. Você deveria entender
Requires
- Dependências difíceis do alvo. Você deve deixar o sistema básico iniciar antes de iniciar seus próprios serviços
Wants
- Dependências suaves. O destino não exige que eles iniciem.
Conflicts
- Se uma unidade tiver uma configuração de Conflitos em outra unidade, iniciar a primeira interromperá a segunda e vice-versa.
After
- Botas após estes serviços
AllowIsolate
- Realmente depende de você e do seu ambiente. Detalhes estão disponíveis na página de manualsystemd.unit(5)
/etc/systemd/system/foo.target.wants/
Este é o diretório em que você vinculará os serviços que você cria / requer para o seu destino. É equivalente à Wants=
opção no arquivo da unidade. Crie esse diretório e, em seguida, crie links simbólicos; ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service
. Isso cria um link simbólico de bar.service no diretório do sistema para o diretório foo.target.wants.
Eu acho que criar um arquivo de unidade para um serviço está meio fora do escopo desta resposta, e essa pergunta é definitivamente mais documentada, então deixarei isso de fora por enquanto. Ao criar seu arquivo de unidade, basta vinculá-lo ao diretório target.wants ou adicioná-lo à Wants=
diretiva.
foo.target
aoRequires
campo eBefore
campo demulti-user.target
, e ele gostaRequires: base.target foo.target
. Depois disso, reinicializo meu Arch Linux vm efoobar.service
executarei como daemon automaticamente.