• # passer par un service

    Posté par  (site web personnel) . Évalué à 6 (+5/-0).

    Pour cela, je passe par un service (system5 ou systemd) qui ne fait rien au start, et qui exécute le script demandé sur stop.
    Voici par exemple un service qui exécute /usr/sbin/tomoyo-savepolicy quand la machine doit s’arrêter :

    [Unit]

    Description=Tomoyo savepolicy

    [Service]
    Type=oneshot
    ExecStart=/bin/true
    ExecStop=/usr/sbin/tomoyo-savepolicy
    StandardInput=tty
    RemainAfterExit=yes

    [Install]
    WantedBy=multi-user.target

    • [^] # Re: passer par un service

      Posté par  (site web personnel) . Évalué à 1 (+0/-0).

      Exactement, systemd est fait pour ça, et il le fait bien.
      Après on peut ajouter des dépendances entre services via des Before= / After=, mais toujours se rappeler qu'à l'arrêt du système cette logique s'inverse, les premiers seront des derniers, tout ça…

    • [^] # Re: passer par un service

      Posté par  (site web personnel) . Évalué à 8 (+6/-0).

      Et si on inversait la logique inversée pour la (re)mettre à l'endroit ? J'ai des choses comme ça localement :

      [Unit]
      Description=<redacted>
      Documentation=<redacted>
      Before=systemd-poweroff.service
      DefaultDependencies=no
      
      [Service]
      Type=oneshot
      ExecStart=/usr/sbin/one-thing
      ExecStart=/usr/sbin/another-one-if-needed
      
      [Install]
      WantedBy=poweroff.target
      

      et :

      [Unit]
      Description=<redacted>
      Documentation=<redacted>
      Before=systemd-reboot.service
      DefaultDependencies=no
      
      [Service]
      Type=oneshot
      ExecStart=/usr/sbin/yet-another-thing
      
      [Install]
      WantedBy=reboot.target
      

      Debian Consultant @ DEBAMAX

      • [^] # Re: passer par un service

        Posté par  . Évalué à 3 (+0/-0).

        sauf quand il est necessaire de conserver un ordre

        tu ne demarres pas la base de données AVANT d'avoir acces à son stockage, et tu ne coupes pas sauvegement le stockage sans avoir arrété la base de données
        donc

        Démarrage :
        = Stockage puis Base de données

        Arrêt :
        = Base de données puis Stockage

        • [^] # Re: passer par un service

          Posté par  (site web personnel) . Évalué à 6 (+4/-0).

          Je ne vois pas le rapport avec la demande initiale. Ni avec ma proposition de ne pas utiliser une unité qui ne fait rien, reste en vie pendant toute la vie du système, avant de lancer des actions lorsqu'elle est stoppée (ce qui n'est pas nécessairement lors de l'arrêt/redémarrage, une typo lors d'un appel kill est si vite arrivée).

          Quoi qu'il en soit, s'il y a des dépendances et/ou un ordre à exprimer, la section [Unit] est faite pour cela, comme d'habitude.

          Debian Consultant @ DEBAMAX

          • [^] # Re: passer par un service

            Posté par  . Évalué à 2 (+1/-0).

            Merci pour vos commentaires.

            J'active le service avec

            systemctl enable toto.service

            Est-ce suffisant pour qu'il soit pris en compte ?

            Si oui, comment tester le lancement de ce service ?

            systemctl start toto.service

            Plus précisement, c'est un service qui appellerait le script shell d'un user avec une commande rsync.

            Au sein du service, est-ce que d'utiliser un user courant bloquerait l'utilisation de rsync ?

            User=mine_user
            Group=mine_user

            Merci pour vos retours.

            • [^] # Re: passer par un service

              Posté par  . Évalué à 3 (+0/-0).

              enable va l'autoriser à s'executer au demarrage ou à l'arret mais ne le lancera pas

              start/stop va le lancer ou l'arreter

              si tu viens de creer le service il faut aussi dire à systemctl qu'il a de nouveaux services a gerer avec
              systemctl daemon-reload

            • [^] # Re: passer par un service

              Posté par  . Évalué à 2 (+1/-0).

              Tu peux aussi faire :

              systemctl enable --now toto.service
              systemctl status toto.service

Envoyer un commentaire

Suivre le flux des commentaires

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