É possível criar um serviço que dependa de vários outros serviços? Qual é a sintaxe correta?
Tal como:
[Unit]
Description=service description
Wants=network.target
After=network.target
After=syslog.target
[Service]
User=bootapp
ExecStart=/var/app/app.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
O objetivo é iniciar um serviço automaticamente após a reinicialização do SO e certificar-se de que os serviços de registro e rede sejam iniciados antes do serviço.
Pergunta adicional: Preciso especificar Restart
?
O arquivo de unidade que você postou parece bom. Mas a unidade como você definiu aqui não tem dependências estritas, apenas fracas (
Wants=
em vez deRequires=
). Isso significa que se network.target não estiver lá ou se falhar ao iniciar, esta unidade será iniciada de qualquer maneira.After=
(eBefore=
) é usado apenas para ordenação, não para gerenciamento de dependência. Portanto, se seu aplicativo precisar de outro serviço, useRequires=
. Se ele precisar desse serviço antes que possa ser iniciado, useAfter=
adicionalmente.Para habilitar sua unidade para iniciar automaticamente após a inicialização, você deve habilitá-la. O Systemd precisa saber onde vinculá-lo para iniciar, é para isso que
WantedBy=
a[Install]
seção é usada. Depois de editar o arquivo de unidade e salvá-lo/etc/systemd/system/my-unit.service
você tem que recarregar o daemon systemd para que ele pegue a nova unidade, antes que você possa habilitá-lo; o comando ésystemctl daemon-reload
. Para habilitar o tipo de unidadesystemctl enable my-unit.service
. Isso adiciona um link simbólico/etc/systemd/system/multi-user.target.wants/
ao seu arquivo de unidade.Para iniciá-lo manualmente, você pode digitar
systemctl start my-unit.service
.Restart=
só é necessário se você quiser que seu aplicativo seja reiniciado automaticamente quando for encerrado. Existem diferentes possibilidades de quando reiniciar, comoon-failure
oualways
(mais na página de manual dosystemd.service
).Além disso, seu app.jar precisa ser executável para que isso funcione. Se for e iniciar seu aplicativo, tudo bem. Eu acho que um jar deve ser iniciado por sth. como
java -jar app.jar
, mas ofc. Posso estar errado aqui.