Au cours du démarrage de CentOS 7, le démarrage de nginx échoue avec l'erreur suivante:
2014/08/04 17:27:34 [emerg] 790#0: bind() to a.b.c.d:443 failed (99: Cannot assign requested address)
Je soupçonne que cela se produit car les interfaces réseau ne sont pas encore actives avant d'essayer de se lier à cette adresse IP pour servir un vhost sur SSL.
Je suppose que je dois spécifier le network.service comme une exigence pour le nginx.service, mais je ne trouve pas du tout le service réseau dans / etc / systemd /.
Comment puis-je configurer l'ordre de service ou les dépendances dans systemd?
Réponses:
Vous avez besoin, au minimum,
After=network.target
dans la[Unit]
section de votre fichier d'unité, vous assurer que le réseau est opérationnel avant de démarrer nginx. Je n'ai aucune idée pourquoi votre fichier d'unité ne l'a pas.Voici un exemple complet de mon système Fedora pratique, tel qu'il est expédié par Fedora:
la source
Du journal des erreurs, il ressemble à votre configuration nginx. Le fichier a une directive Listen avec une adresse IP explicite:
Cela signifie que nginx ne démarrera que si votre interface réseau est active et que l'abcd IP a été attribué à l'interface.
Vous avez deux options:
Comme décrit dans http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ le network.target indique seulement que la pile de gestion du réseau est en place [...] Si des interfaces réseau sont déjà configurées lorsqu'elles sont atteintes n'est pas défini.
Si vous voulez vous assurer que l'adresse IP est déjà attribuée et que l'interface est en place, vous devez ajouter le network-online.target au fichier d'unité systemd de votre nginx.
Votre fichier /etc/systemd/system/multi-user.target.wants/nginx.service doit avoir network-online.target dans les lignes After = et requires =.
la source
network-online.target
- au cas où quelqu'un se demanderait aussi: oui, les deuxRequires=
etAfter=
sont nécessaires parce queRequires=
(sans doute surprenant) n'implique pas un ordre entre l'unité requise et l'unité requise.