2 votes

Pourquoi postgrey ne se lance pas correctement au démarrage avec Ubuntu 16.04 ?

J'ai mis à jour mon Ubuntu 14.04 LTS vers 16.04.1 LTS et j'ai maintenant un problème avec mon installation postgrey. Lorsque je (re)démarre le serveur, le script de démarrage de postgrey est apparemment appelé, mais postgrey ne se lance pas correctement. Ce n'est qu'après avoir redémarré manuellement le 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 alors 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 dans mon ps sortie maintenant, 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 moment du démarrage ? Comment puis-je localiser l'erreur ? Je n'ai pas trouvé d'indications sur les causes de l'erreur, donc tout conseil à ce sujet pourrait également m'aider. Puisque cela fonctionnait dans la version 14.04 et a cessé de fonctionner dans la version 16.04, peut-être est-ce lié à upstart vs. systemd ?

4voto

Badams Points 156

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

Ensuite, désactivez l'exécution des versions init de sysv :

update-rc.d -f postgrey remove

Vous devrez activer le nouveau service systemd pour qu'il démarre au démarrage :

 systemctl enable postgrey

Maintenant, essayez à nouveau de démarrer le service en utilisant systemd :

 systemctl start postgrey

Si elle toujours ne parvient pas à démarrer. Vérifiez le journal spécifique de ce service, journalctl -u postgrey et aussi le journal général de systemd : journalctl .

Je recommande également de soumettre un correctif à postgrey pour ajouter un fichier d'unité systemctl à leur contrib ainsi, à l'avenir, un fichier de service officiel de systemd sera utilisé pour démarrer le service sur les systèmes basés sur systemd et une couche de shim ne sera pas nécessaire.

0voto

Marco Points 186

J'ai eu un problème très similaire sur un système Ubuntu 16 désactivé pour 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 modifié le --inet à un paramètre :

--inet=127.0.0.1:10025

Bien sûr, une meilleure solution serait de laisser systemd s'en occuper comme décrit dans la première réponse, et de définir l'attribut --inet dans les ExecStart= ligne vers 127.0.0.1:10025

Il n'y avait aucune trace dans les journaux, jusqu'à ce que je lance le binaire postgrey dans la console et que je voie ce qui suit :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X