Je l'avais bien compris comme ça.benjarobin a écrit :J'avais mal compris le sens de MAINPID et je crains que toi aussi. Le but de --pid ou de MAINPID est juste d'indiquer à systemd que le processus principal d'un service est celui spécifié. J'ai compris ceci en regardant le code très en détail, mais en faites c'était très clairement indiqué dans la doc...
systemd-notify sert juste à dire à systemd : "Hey Machin ! Le processus $DAEMON tourne toujours, il va bien, ne le redémarre pas, merci."
Et à mon sens, systemd-notify est mal conçu.
Il devrait à minima utiliser le PID de son père pour envoyer ça à systemd, ou mieux, exiger un PID comme paramètre.
Oui, tu m'as compris : systemd-notify devrait de toute façon associer son message avec un autre PID que le sien. Et le fait qu'il s'arrête de suite ne devrait pas poser de problème.benjarobin a écrit :Le problème de systemd-notify, qui n'a surement jamais vraiment fonctionné, c'est qu'il envoi un message avec son identifiant (pid) et se termine de suite. Quand systemd reçoit le message il ne reconnait pas ce pid car il n'existe déjà plus. Donc un gros correctif à été réalisé ici https://bugs.freedesktop.org/show_bug.cgi?id=75680 mais qui a été cassé par quelqu'un par la suite (le but de mon premier patch). Sauf que le correctif du rapport de bug n'avait en effet pas corrigé entièrement le problème de systemd-notify qui n’envoie pas dans tous les cas un pid non nul (surement le sens de tes derniers messages...)
Bref j'ai donc soumis un dernier patch
systemd-notify envoie un message disant "le processus PID tourne toujours, tout va bien" et s'arrête.
systemd remarque qu'il a un message en attente, envoyé par un inconnu peut-être, qui dit que PID tourne. Il n'arrête donc pas PID.
Le fait de ne pas pouvoir identifier l'expéditeur n'est pas nécessaire fonctionnellement (au niveau de la sécurité c'est autre chose...).
De toute façon, merci pour ta contribution : je ne suis pas développeur (sysadmin) et je n'aurais pas pu faire ce que tu as fait (ça doit bien faire 15 ans que je n'ai pas fait de C...).
Par contre, je vais attendre que ton patch soit intégré upstream : pas le courage de recompiler systemd là.