Você define um alvo que requer o PostgreSQL da seguinte forma:
$ cat postgresql.target
[Unit]
Description=Emergency Mode with Networking
Requires=network.target postgreql.service
After=postgreql.service
AllowIsolate=yes
Isso você adiciona ao seu serviço:
[Unit]
Decription=StackExchange Foo Bar
After=network.target postgresql.target
# Some non-relevant stuff removed
[Install]
WantedBy=default.target
EDIT (Após comentário):
O acima está incorreto, eu supus que o systemd no espaço do usuário poderia ver qualquer alvo.
Após a investigação, parece que apenas conhece estes alvos:
default.target, shutdown.target, sockets.target, timers.target, paths.target, bluetooth.target, printer.target, smartcard.target, sound.target.
Isso significa que você teria que adicionar o postgresql.service
a qualquer um dos destinos acima que fizesse sentido, eu o adicionaria a sockets.target
e teria seu foobar.service
start AFTER default.target
, que é atingido DEPOIS sockets.target
.
Para adicionar o postgresql.service
ao sockets.target
, adicione sockets.target
a WantedBy=
de postgresql.service
e, em seguida, atualize a configuração do systemd.
Outra opção exigiria netcat, nc -z <host> <port>
retornará 0
se a porta estiver aberta ... no script, seu serviço executa apenas o loop enquanto a porta do PostgreSQL está fechada ... assim que a porta abrir, aguarde outra segundo ou dois (ou o que quer que seja prático) e depois faça o seu serviço fazer o que é suposto.