Por que o postgrey não é iniciado corretamente na inicialização com o Ubuntu 16.04?

0

Eu atualizei meu Ubuntu 14.04 LTS para o 16.04.1 LTS e agora eu tenho um problema com a minha instalação postgrey. Quando eu (re) inicializo o servidor, o script de inicialização postgrey aparentemente é chamado, mas o postgrey não é iniciado corretamente. Somente depois de reiniciar manualmente o serviço, o postgrey está funcionando corretamente.

Mais detalhadamente: Após a reinicialização, as seguintes linhas aparecem no meu syslog:

Dec  1 19:22:14 systemd[1]: Starting LSB: Start/stop the postgrey daemon...
Dec  1 19:22:14 postgrey[998]:  * Starting postfix greylisting daemon postgrey
Dec  1 19:22:15 postgrey[1050]: Process Backgrounded
Dec  1 19:22:15 postgrey[1050]: 2016/12/01-19:22:15 postgrey (type Net::Server::Multiplex) starting! pid(1050)
Dec  1 19:22:15 postgrey[998]:    ...done.
Dec  1 19:22:15 systemd[1]: Started LSB: Start/stop the postgrey daemon.

Quando eu então ps para postgrey, nenhum processo é encontrado. No entanto, um simples sudo systemctl restart postgrey faz com que seja executado corretamente. O lançamento é documentado no syslog da seguinte forma:

Dec  1 19:25:54 systemd[1]: Stopping LSB: Start/stop the postgrey daemon...
Dec  1 19:25:54 postgrey[1878]:  * Stopping postfix greylisting daemon postgrey
Dec  1 19:25:54 systemd[1]: postgrey.service: Control process exited, code=exited status=1
Dec  1 19:25:54 systemd[1]: Stopped LSB: Start/stop the postgrey daemon.
Dec  1 19:25:54 systemd[1]: postgrey.service: Unit entered failed state.
Dec  1 19:25:54 systemd[1]: postgrey.service: Failed with result 'exit-code'.
Dec  1 19:25:54 systemd[1]: Starting LSB: Start/stop the postgrey daemon...
Dec  1 19:25:54 postgrey[1886]:  * Starting postfix greylisting daemon postgrey
Dec  1 19:25:54 postgrey[1886]: Pid_file "/var/run/postgrey.pid" already exists.  Overwriting!
Dec  1 19:25:54 postgrey[1893]: Process Backgrounded
Dec  1 19:25:54 postgrey[1893]: 2016/12/01-19:25:54 postgrey (type Net::Server::Multiplex) starting! pid(1893)
Dec  1 19:25:54 postgrey[1886]:    ...done.
Dec  1 19:25:54 systemd[1]: Started LSB: Start/stop the postgrey daemon.
Dec  1 19:25:54 postgrey[1893]: Resolved [localhost]:10023 to [::1]:10023, IPv6
Dec  1 19:25:54 postgrey[1893]: Resolved [localhost]:10023 to [127.0.0.1]:10023, IPv4
Dec  1 19:25:55 postgrey[1893]: Binding to TCP port 10023 on host ::1 with IPv6
Dec  1 19:25:55 postgrey[1893]: Binding to TCP port 10023 on host 127.0.0.1 with IPv4
Dec  1 19:25:55 postgrey[1893]: Setting gid to "120 120"
Dec  1 19:25:55 postgrey[1893]: Setting uid to "112"

Como você pode ver, desta vez postgrey documenta sua ligação à porta correta. Quando olho para minha saída ps agora, vejo o processo de trabalho lá. Minha pergunta é: Por que o processo não é iniciado corretamente quando é chamado no momento da inicialização? Como posso identificar o erro? Eu não encontrei nenhuma pista sobre o que causa o erro, então qualquer conselho a respeito disso pode me ajudar também. Como costumava trabalhar em 14.04 e parou de funcionar em 16.04, talvez esteja relacionado a upstart vs. systemd?

    
por ilpssun 01.12.2016 / 19:54

1 resposta

1

O projeto postgrey não inclui em um arquivo systemd "unit" service, nem o pacote Ubuntu para ele. O serviço é carregado por um shim que permite ao systemd gerenciar serviços que usam os scripts "init" sysv mais antigos. Isso deve funcionar, mas acrescenta uma camada extra de indireção e complicação. Eu recomendo que você tente colocar o seguinte em /etc/systemd/system/postgrey.service :

[Unit]
Description=Postfix Greylisting Service
Before=postfix.service

[Service]
Type=forking
ExecStartPre=-/bin/rm -f /var/run/postgrey.pid
PIDFile=/var/run/postgrey.pid
ExecStart=/usr/local/sbin/postgrey --inet=10025 -d --delay=150 --pidfile=/var/run/postgrey.pid
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

Em seguida, desabilite a execução das versões do sysv init:

update-rc.d -f postgrey remove

Você precisará ativar o novo serviço systemd para iniciar na inicialização:

 systemctl enable postgrey

Agora tente novamente para iniciar o serviço usando o systemd:

 systemctl start postgrey

Se ainda não for iniciado. Verifique o log específico para este serviço, journalctl -u postgrey e também o diário systemd geral: journalctl .

Eu também recomendo enviar um patch para postgrey project para adicionar um arquivo de unidade systemctl ao seu diretório contrib , então no futuro um arquivo de serviço systemd oficial será usado para iniciar o serviço em sistemas baseados em systemd e um shim camada não será necessária.

    
por Mark Stosberg 02.12.2016 / 19:57