Estou configurando o kong como um gateway de API. Requer cassandra.
Estou usando o Centos 7 e criei o arquivo de unidade systemd para cada um com o kong começando após o cassandra e exigindo o cassandra.
Aqui estão os arquivos da minha unidade.
Kong:
[Unit]
Description=Kong API Gateway
After=network.target
After=cassandra.service
Requires=cassandra.service
[Service]
ExecStart=/usr/local/bin/kong start
ExecStop=/usr/local/bin/kong stop
ExecReload=/usr/local/bin/kong reload
Type=forking
PIDFile=/usr/local/kong/kong.pid
[Install]
WantedBy=default.target
Cassandra:
[Unit]
Description=Cassandra DB
After=network.target
[Service]
ExecStart=/opt/apache-cassandra-2.1.11/bin/cassandra -p /run/cassandra.pid
ExecStop=/usr/bin/kill $(cat /run/cassandra.pid)
Type=forking
PIDFile=/run/cassandra.pid
[Install]
WantedBy=default.target
O Kong sempre falha, pois a cassandra ainda não aceita conexões. O Cassandra cria seu arquivo pid, que parece ser o que o systemd usa para saber que está pronto, mas não começa a escutar conexões por alguns segundos.
Existe uma boa maneira de fazer isso funcionar?
Uma de minhas ideias era criar um script separado para kong que esperaria que a porta TCP da cassandra estivesse ouvindo antes de iniciar.
Se a cassandra não for bifurcada até que esteja realmente pronta, ou não crie o arquivo pid até que esteja realmente pronto, acho que isso iria consertar isso.