Para que systemd
detecte se o processo foi iniciado com êxito, você deve usar Type=forking
, bifurcar seu processo em um script auxiliar e verificar esse script se o processo foi iniciado com êxito. Com bifurcação, systemd
aguardará o término do comando ExecStart
e verificará seu status de saída.
Você deve alterar o arquivo da unidade assim:
[Unit]
Description=test service
After=syslog.target
[Service]
Type=forking
User=testuser
Group=testuser
ExecStart=/usr/local/bin/fork_service
[Install]
WantedBy=multi-user.target
e em /usr/local/bin/fork_service
você deve ter algo assim:
#!/bin/bash
# Run your process in background
/path/to/your_service &
# Check if the services started successfully
if ! kill -0 $! 2>/dev/null; then
# Return 1 so that systemd knows the service failed to start
exit 1
fi
Estou aqui apenas verificando se o PID do processo em segundo plano ainda está ativo, mas você pode ter qualquer verificação que desejar. A única coisa importante é que este script sai com 0 se o processo foi iniciado com sucesso, ou um valor positivo diferente de zero se falhou.
Além disso, você não precisa usar o Bash para criar um processo, você pode usar qualquer idioma que quiser.