Um serviço do systemd depende de outro

2

Estou tentando refatorar um único serviço / programa systemd em vários programas e serviços. Meu único grande serviço parecia:

[Unit]
Description=Runs the App loop
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 -u /App/mainLoop
WorkingDirectory=/App
StandardOutput=journal
Restart=on-failure

[Install]
WantedBy=multi-user.target

Eu montei isso junto de outros exemplos. O que eu quero agora é dois serviços:

ServiceA

[Unit]
Description=Initializes some things
After=network-online.target # Question 1

[Service]
Type=simple
ExecStart=/usr/bin/python3 -u /App/startup
WorkingDirectory=/App
StandardOutput=journal
Restart=on-failure # Question 2

[Install]
WantedBy=multi-user.target

ServiceB

[Unit]
Description=Runs the App loop
After=network-online.target # Question 3

[Service]
Type=simple
ExecStart=/usr/bin/python3 -u /App/mainLoop
WorkingDirectory=/App
StandardOutput=journal
Restart=on-failure

[Install]
WantedBy=multi-user.target # Question 4

Então eu tenho vários pontos de perguntas aqui (referenciados pelos comentários acima):

  1. Eu não preciso mais que a rede esteja viva para isso. O que devo colocar aqui em vez disso? Como alguém procura alvos possíveis?
  2. Eu quero que o aplicativo de inicialização seja executado apenas uma vez na inicialização, nunca mais. Eu suponho que preciso alterar o sinal Restart para outra coisa, mas o que?
  3. Em vez de seguir a rede, é claro, quero que isso seja executado depois que o serviço A for concluído E SOMENTE SE conseguir sair com um 0 e gravar um arquivo. Como faço para começar após o serviço A inicializar com sucesso?
  4. Mais de 3 eu acho. Ainda estou confuso sobre qual é a diferença entre o WantedBy target e o After target. O WantedBy é basicamente o grupo ao qual ele pertence, e o After o que ele tem que ser serializado depois?
por Travis Griggs 15.01.2016 / 02:09

1 resposta

5
  1. Os destinos dependem do SO, que você não listou aqui. Provavelmente default.target . Você pode visualizar os destinos e os usos, observando a saída de systemctl list-dependencies
  2. Basta remover "Reiniciar" totalmente
  3. O serviço inicial deve ser Type=oneshot . Caberá ao serviço sair corretamente com base no fato de ter escrito ou não o arquivo desejado. Você pode usar ExecStartPre para iniciar os scripts de inicialização.
  4. WantedBy informa systemd para iniciar o serviço quando ele entra no destino determinado. After diz para iniciar a unidade depois que todas as unidades no destino determinado (ou unidade) forem concluídas.
por 15.01.2016 / 03:09

Tags