web-dev-qa-db-fra.com

Pourquoi Postgrey ne se lance-t-il pas correctement au démarrage avec Ubuntu 16.04?

J'ai mis à jour mon Ubuntu 14.04 LTS vers 16.04.1 LTS et maintenant j'ai un problème avec mon installation postgrey. Lorsque je (re) démarre le serveur, le script de démarrage postgrey est apparemment appelé mais postgrey ne se lance pas correctement. Ce n'est qu'après un redémarrage manuel du service que postgrey fonctionne correctement.

Plus en détail: Après le redémarrage, les lignes suivantes apparaissent dans mon 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.

Quand j'ai ensuite ps pour postgrey, aucun processus n'est trouvé. Cependant, un simple Sudo systemctl restart postgrey le fait fonctionner correctement. Le lancement est documenté dans syslog comme suit:

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"

Comme vous pouvez le voir, cette fois, postgrey documente sa liaison au bon port. Quand je regarde maintenant ma sortie ps, je peux voir le processus de travail là-bas. Ma question est la suivante: pourquoi le processus ne se lance-t-il pas correctement lorsqu'il est appelé au démarrage? Comment puis-je localiser l'erreur? Je n'ai pas pu trouver d'indices sur la cause de l'erreur, donc tout conseil à ce sujet pourrait également m'aider. Puisqu'il fonctionnait en 14.04 et a cessé de fonctionner en 16.04, c'est peut-être lié à upstart vs systemd?

1
ilpssun

Le projet postgrey n'inclut pas dans un fichier "service unit" systemd, ni le package Ubuntu pour celui-ci. Le service est plutôt chargé par un shim qui permet à systemd de gérer les services qui utilisent les anciens scripts "init" sysv. Cela est censé fonctionner, mais ajoute une couche supplémentaire d'indirection et de complication. Je vous recommande d'essayer de mettre les éléments suivants dans /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

Désactivez ensuite l'exécution des versions de sysv init:

update-rc.d -f postgrey remove

Vous devrez activer le nouveau service systemd pour démarrer au démarrage:

 systemctl enable postgrey

Essayez à nouveau de démarrer le service à l'aide de systemd:

 systemctl start postgrey

Si cela encore ne démarre pas. Consultez le journal spécifique de ce service, journalctl -u postgrey et aussi le journal systemd général: journalctl.

Je recommande également de soumettre un correctif au projet postgrey pour ajouter un fichier d'unité systemctl à leur répertoire contrib afin qu'à l'avenir un fichier de service systemd officiel soit utilisé pour démarrer le service sur les systèmes basés sur systemd et une couche de cale ne sera pas nécessaire.

2
Mark Stosberg

J'ai eu un problème très similaire sur un système Ubuntu 16 désactivé IPV6, et il était lié à l'échec de la liaison IPV6 de Postgrey sur le port 10025.

Je l'ai corrigé en modifiant /etc/default/postgrey et a changé le --inet paramètre à:

--inet=127.0.0.1:10025

Bien sûr, une meilleure solution serait de laisser systemd le gérer comme décrit dans la première réponse, et définir le --inet paramètre dans le ExecStart= ligne vers 127.0.0.1:10025

Il n'y avait aucune trace dans les journaux, jusqu'à ce que j'aie exécuté le binaire postgrey dans la console et vu ce qui suit:

ERROR: Can't connect to TCP port 10025 on ::1 [Cannot assign requested address] at /usr/sbin/postgrey line 776.
0
Marco