Service qui démarre trop vite au boot (squid3)

Tags: #<Tag:0x00007f78bc2b3a40>

Bonjour,

Sur un serveur debian 9 qui va me servir de proxy, j’ai installé squid3 (3.5.23-5+deb9u1).
Sur ce même serveur j’ai configuré plusieurs adresses IP publiques, et je vais être amené à recommencer

J’ai 2 problèmes :
1- Je me suis rendu compte qu’au reboot du serveur, le service squid démarre mais fonctionne mal (des erreur 400 par exemple, et pas d’accès au net depuis le proxy). --> la solution, redémarrer le service. Je fait hypothèse (qui semble se vérifier) que squid démarre avant que mes interfaces réseaux soient prêtes, puisque une fois le boot fini si on relance le service il fonctionne très bien.

2- Si j’ai reboot mon serveur, c’est par ce que quand j’ajoute des IPs dans /etc/network/interfaces, la commande ‘sudo service networking restart’ ne prends pas en compte mes nouvelles IPs configurés. Je n’ai pas trouvé d’autre solutions pour prendre mes nouvelles IPs que de reboot le serveur.

J’ai donc 3 questions liés à ces problèmes :
A) Comment retarder le démarrage du service, je veut dire par là, attendre que les interfaces soient UP avant se lancer ?

B) En cherchant la solution à la question A, je me rends compte que Squid démarre avec /etc/init.d/squid, et non pas avec un service dans /etc/systemd/… Mon idée était de configurer un prérequis “réseau OK” dans systemd, mais en fait ce n’est pas un service systemd.
Donc faut-il migrer ? Et du coup comment faire? Ou bien est-il possible a minima de spécifier dans /etc/init.d/squid de démarrer uniquement quand mes interfaces sont UP ?

C) Pour éviter le reboot à chaque ajout d’IP, comment faire pour qu’elle soient prises en compte ? ifdown / if up , networking restart ? je ne sait plus comment faire, le but serait d’éviter la coupure de service au max.

Merci pour votre aide.

PS : voici un extrait de mon /etc/network/interfaces pour configurer plusieurs IPs sur une même interface si ça vous aide :
auto ens34
iface ens34 inet static
address 64.23.56.89
netmask 255.255.255.255
gateway 64.23.56.1

iface ens34 inet static
address 32.65.98.74
netmask 255.255.255.255

iface ens34 inet static
address 52.69.47.58
netmask 255.255.255.255

iface ens34 inet static
address 85.63.41.20
netmask 255.255.255.255

ces IPs ne sont évidements pas les vraies

salut
Un service systemd peut se conditionner à un autre service avec After= dans la partie Unit
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#

Exemple j’ai créé un service qui envoit des mails de résultat, donc je l’ai conditionné à exim4

[Unit]
Description=update-perso
After=exim4.service

Les services sont dans /lib/systemd/system/

Exemple les service NetworkManager ou network-online.target

systemctl status NetworkManager

systemctl status network-online.target

exim à son service qui lance dans /etc/init.d

 systemctl status exim4.service
● exim4.service - LSB: exim Mail Transport Agent
   Loaded: loaded (/etc/init.d/exim4; generated)
   Active: active (running) since Mon 2018-05-28 11:14:28 CEST; 13min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 7077 ExecStart=/etc/init.d/exim4 start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 4299)
   Memory: 5.3M
   CGroup: /system.slice/exim4.service
           └─7465 /usr/sbin/exim4 -bd -q30m

Pourquoi pas t’en inspirer pour squid, c’est basé sur https://www.freedesktop.org/software/systemd/man/systemd-sysv-generator.html et https://www.freedesktop.org/software/systemd/man/systemd.generator.html#