Eu tenho dois programas que chamei de program1
e program2
, que executam uma tarefa principal de duas operações. Quando program1
começar a executar, canalize seus resultados para program2
, que executa o resultado final. Como os dois programas devem ser executados continuamente, implementei um serviço systemd para isso e aqui está o conteúdo do arquivo /lib/systemd/system/servers.service
.
[Unit]
Description=Start servers
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/servers >> /var/log/servers.log
Restart=always
TimeoutStartSec=100
User=root
ExecStartPre=killall -w -q program1 && killall -w -q program2
User=root
ExecStopPost=killall -w -q program1 && killall -w -q program2
User=root
[Install]
WantedBy=multi-user.target
Quando executar o serviço, o systemd cria dois processos para realizar a tarefa, aqui você pode ver o status.
sudo service servers status
# result
● servers.service - Start servers
Loaded: loaded (/lib/systemd/system/servers.service; enabled)
Active: active (running) since Wed 2016-06-29 21:00:27 UTC; 2h 5min ago
Main PID: 11942 (server)
CGroup: /system.slice/servers.service
├─11942 program1
└─11944 program2
quando um dos programas falha, o serviço ainda está em estado de execução, o que não é logicamente correto, porque a tarefa principal está parada.
Por favor, gostaria de saber se é possível implementar tal situação com os serviços systemd? Se sim, como?