Forum Linux.général Trouver ce qui déclenche un service systemd

Posté par  . Licence CC By‑SA.
Étiquettes :
5
2
juin
2020

Bonjour,

Sur une Debian je voudrais savoir ce qui déclenche l'exécution d'un service donné.
Toutes les quelques minutes un service se lance, fait son travail, puis s'arrête, mais je ne trouve pas ce qui provoque son lancement.

J'ai regardé les tâches cron sans rien trouver, et les programmes en mémoire ne me semblent pas avoir de rapport avec ce service. Je ne vois pas non plus de timer systemd qui concerne ce service. Dans le logs je ne trouve rien qui m'aide non plus.

Peut-on faire en sorte d'avoir une trace de ce que fait systemd ? Ou au moins savoir ce qui déclenche le lancement d'un service.

  • # Quelques idées

    Posté par  . Évalué à 4.

    Il s'agit peut-être d'un timer lié à un utilisateur (pas root) ?
    - Pour avoir la liste des timers du système :
    systemctl list-timers (quand on est connecté en root)
    - Pour avoir la liste des timers d'un utilisateur :
    systemctl --user list-timers (quand on est connecté en tant que cet utilisateur)

    Lorsqu'aucun utilisateur n'est connecté au système, le service se lance-t-il périodiquement ?
    Pour voir cela, tu pourrais laisser ton ordinateur sans utilisateur connecté pendant une durée suffisamment longue, puis étudier les logs à posteriori.

    • [^] # Re: Quelques idées

      Posté par  . Évalué à 2.

      Aucun timer ne lance ce service.
      Et le service est relancé même si personne n'est connecté.

      Mais ça ne fait pas avancer la question de savoir comment "tracer" le lancement de services systemd.

      • [^] # Re: Quelques idées

        Posté par  . Évalué à 0.

        Le service en question est peut-être lancé parce qu'il est une dépendance d'un autre service, qui lui est lancé régulièrement par un timer ?

        Proposition : arrêter tous les timers actifs pendant une période suffisamment longue, puis regarder dans les logs si le service s'est lancé durant cette période.

        • [^] # Re: Quelques idées

          Posté par  . Évalué à 3.

          Si c'est pour trouver ça, il vaut mieux utiliser systemctl --reverse list-dependencies, ce sera plus simple.

          « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

        • [^] # Re: Quelques idées

          Posté par  . Évalué à 4.

          arrêter tous les timers actifs pendant une période suffisamment longue, puis regarder dans les logs si le service s'est lancé durant cette période.

          La question semble être de savoir comment tracer les actions de systemd. Ce n'est pas en cherchant les éléments un par un au petit bonheur la chance qu'on en censé le faire.

          Pour ma part j'ai eu ce besoin il y a 2 ans, je n'ai pas trouvé comment faire.
          J'avais même cherché à coups de find et grep pour repérer ce qui pouvait exécuter le programme, je n'ai pas trouvé. Je n'avais qu'1 ou 2 heures pour le faire, je suis passé à la résolution du problème sans en comprendre la source.

          • [^] # Re: Quelques idées

            Posté par  (site web personnel) . Évalué à 3.

            Moi j'utilise généralement : systemd-analyze critical-chain nom_du_service.service

            Je ne sais pas si ca répond à tous les besoins mais pour le moment ca a toujours répondu à mes questions.

  • # rescue.target

    Posté par  . Évalué à 3.

    Le service se lance-t-il si la cible rescue.target est la seule lancée ?

    Dans un tty, faire :
    systemctl isolate rescue.target

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.