Às vezes, um serviço será iniciado e dará a ilusão de que está pronto - mesmo que não tenha terminado o "aquecimento". Nesta instância específica, estou usando o ApacheDS para fornecer serviços LDAP. Quando esta unidade é iniciada, a verificação "apaceados de status do systemctl" mostrará sua execução, juntamente com a única linha de registro:
Apr 04 15:34:33 daisy systemd [1]: Iniciado o Apache Directory Server.
Mas ... ainda não está sendo veiculado. Até que um teste de porta (como "lsof-i: 389" ou "netstat -pan | grep: 389 | grep LISTEN") revele que há um ouvinte ativo, não há LDAP disponível.
Se deve fazê-lo ou não - isso leva cerca de 2 minutos para ser totalmente inicializado. Minha pergunta não é se o ApacheDS está quebrado ou não, ou se deve ser substituído - é como lidar com os serviços de inicialização lenta no systemd.
Existe uma maneira de colocar um teste como esse no systemd, para que ele espere até que seja válido mostrar o serviço do apache como iniciado ou fornecer como uma pré-condição para serviços dependentes, sem que eles simplesmente falhem e ainda se recusar a começar?
Aqui está um script de teste em funcionamento:
#!/bin/bash
TRIES=30
WAIT=10
while /bin/netstat -an | /bin/grep \:10389 | /bin/grep LISTEN ; [ $? -ne 0 ]; do
let TRIES-=1
if [ $TRIES -gt 1 ]; then
sleep $WAIT
fi
done