postgres -w flag breakd systemd

0

Então, sou muito novo no Arch e estou tendo um problema estranho. Usando systemctl não consigo iniciar o postgresql. A inicialização do postgresql diretamente com pg_ctl funciona bem e é até iniciada brevemente com systemctl .

O arquivo de unidade do systemd criado ao instalar o + postgrading inicializado no Arch linux contém o comando ExecStart de:

ExecStart= /usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120

Depois de dar uma olhada no arquivo da unidade, notei uma correlação com o tempo de falha e o tempo limite para o comando start. Depois que eu mudei o sinalizador -w (aguarde até que a operação seja concluída) para o sinalizador -W (não espere até que a operação concorra) voila! Tudo funciona perfeitamente, não há mais tempos limite ou falha no serviço.

Isso é ótimo e eu posso fazer um arquivo de unidade modificado sem problemas. Eu só estou querendo saber se este é um efeito colateral de alguma outra configuração sendo estragada ou o arquivo de unidade gerada está apenas incorreto?

    
por Jason Truluck 04.03.2015 / 04:41

1 resposta

0

O -w flag funciona periodicamente tentando se conectar ao seu servidor. Obviamente, qualquer coisa que impeça uma conexão com seu servidor fará com que pg_ctl pense que seu servidor ainda não foi iniciado. Então, ele fica por aí, tentando novamente até o tempo limite especificado. Quando atinge o tempo limite, ele retorna um código de saída diferente de zero para systemd e o systemd chama automaticamente o comando ExecStop configurado, parando efetivamente o servidor.

Se você conseguir se conectar ao seu servidor ao iniciá-lo manualmente com pg_ctl (ou seja, não apenas em ps -ef ), é possível que alguma variável de ambiente seja diferente ( PGPORT , PGDATA ).

Outra coisa que pode causar isso é tentar recuperar ou iniciar um servidor em espera. Até que o servidor esteja completamente pronto, ele aceitará conexões socker, mas registrará um erro e recusará qualquer consulta. Se você estiver fazendo uma pausa no final da recuperação ou aguardando em espera, o servidor nunca estará pronto.

Pode haver algumas informações úteis em pg_log no diretório PGDATA . Pelo menos, isso indicará se o servidor está vendo, mas rejeitando as consultas de pg_ctl .

    
por 18.03.2015 / 20:37