Quero que meu serviço (dependendo do PostgreSQL) inicie na inicialização, então usei enable
e systemd
no .service
arquivo digo Wants
o serviço postgres:
[Unit]
Description=My service
Wants=postgresql-12
[Service]
User=root
WorkingDirectory=/path/to/myservice
ExecStart=/path/to/myservice/my_service -d
[Install]
WantedBy=multi-user.target
myservice
não inicia na inicialização, porque o servidor PostgreSQL ainda não está lá (posso ver isso em meus logs). Ao iniciá-lo mais tarde systemctl start myservice
, ele inicia bem, então parece que o .service
arquivo é válido.
Por que não estou systemctl
aguardando o Postgres antes de iniciar meu serviço? Tentei verificar também com systemd-analyze blame
, mas parece mostrar apenas serviços em execução.
Wants=
não implicaAfter=
, então você precisa especificar ambos.Embora em alguns casos isso aconteça, mas principalmente apenas quando um alvo "quer" outra unidade. (Portanto, quando multi-user.target tiver Wants=your.service, isso implicará em After=your.service.) Mas isso é uma exceção; a regra geral é que a ordem não é definida automaticamente a partir das dependências.
Além disso, ambos Wants= e After= requerem um nome de unidade "completo" - mesmo que 'postgresql-12' seja suficiente para systemctl, você deve especificá-lo como
postgresql-12.service
dentro dos arquivos de unidade.