Forum Linux.debian/ubuntu automatiser script monitoring avec systemd

Posté par  (site web personnel, Mastodon) . Licence CC By‑SA.
1
22
sept.
2025

Salut,

La communauté m'a déjà aidé à créer un script de collecte de données d'usage d'un ordi (monitoring) dans un contexte de recherche en sciences de l'éducation.

ça a bien marché: je démarrais le script avant l'expérience et je pouvais ensuite analyser/visualiser les données avec matplotlib. Merci :-)

Je cherche maintenant à collecter le même type de données dans une expérience différente, pendant laquelle je n'ai pas accès aux ordis. La collecte de données doit être automatisée pour chaque fois que la participante utilise l'ordinateur; je dois retrouver un fichier de donnée pour chaque session d'usage.

Pour ce faire j'ai choisi systemd avec un fichier monitored.service dans /etc/systemd/system/ dont voici le contenu:

[Unit]
Description=Service global pour exécuter monitoring au démarrage
After=network.target

[Service]
Type=simple
ExecStart=/home/sysadmin/research/monitoring.sh
Restart=always

[Install]
WantedBy=multi-user.target

Le service est activé, mais le script fonctionne avec des erreurs, puisqu'aucun fichier de donnée est créé:

    ● monitored.service - Service global pour exécuter ./monitoring.sh au démarrage
         Loaded: loaded (/etc/systemd/system/monitored.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2025-09-22 16:28:38 CEST; 16min ago
       Main PID: 517 (monitoring.sh)
          Tasks: 2 (limit: 8612)
         Memory: 5.0M
            CPU: 4.768s
         CGroup: /system.slice/monitored.service
                 ├─ 517 /bin/sh /home/sysadmin/research/monitoring.sh
                 └─7197 sleep 2

    Sep 22 16:28:38 sysadmin-HP-EliteBook-840-G3 systemd[1]: Started Service global pour exécuter ./monitoring.sh au démarrage.
    Sep 22 16:28:38 sysadmin-HP-EliteBook-840-G3 monitoring.sh[517]: /usr/bin/nproc
    Sep 22 16:28:39 sysadmin-HP-EliteBook-840-G3 monitoring.sh[517]: Le nombre de coeurs s'élève à: 4
    Sep 22 16:28:39 sysadmin-HP-EliteBook-840-G3 monitoring.sh[528]: No LSB modules are available.

C'est plutôt simple ce que je veux faire, mais n'y parviens pas encore. Systemd indique deux tâches: celle du script et celle dans le script du sleep 2. Est-ce que je supprime le sleep 2 dans le script et indique à systemd d'executer le service chaque 2 secondes? ça va me faire des tonnes de fichiers difficiles à analyser!

Le script en question

  • # Qques trucs...

    Posté par  (Mastodon) . Évalué à 5 (+3/-1). Dernière modification le 23 septembre 2025 à 07:37.

    1/ Déjà tu lances un script utilisateur (sysadmin ?) via le système, pas bien !

    Tu devrais plutôt le faire lancer toujours par systemd, mais via ton utilisateur.

    Tu trouveras plein d'infos ici, mais je te résume:

    • tu mets ton fichier dans ~/.config/systemd/user/
    • tu lances toutes les commandes systemctl habituelles, mais avec --user :
      • systemctl --user enable toto.service
      • systemctl --user restart toto.service
      • etc…

    Pour que le job reste actif même quand tu te déconnectes, tu dois donner des droits spéciaux à ton utilisateur : (en root cette fois-(ci): loginctl enable-linger <username> (à ne faire qu'une fois donc)

    2/ Ensuite tu dois dire à systemd où se trouve le répertoire dans lequel ton script sera exécuté. Dans ton service ajoute un ligne qui devrait ressembler à WorkingDirectory=%h/research/

    Voilà, ça devrait aller mieux.

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: Qques trucs...

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

      Merci pour ces commentaires gUI :-)

      Utilisateur, système et droit

      J'avais pas compris la logique. Avec ta piste et ton lien, j'ai pu mieux me renseigner sur la possibilité de gérer un service utilisateur par un utilisateur, via systemd.

      Job actif

      Le enable-linger ne semble pas répondre à mon besoin. Je veux que le système collecte des données à chaque fois que la participante utilise l'ordinateur. ça peut être au démarrage de la machine, mais aussi sa sortie de veille. Comme je veux retrouver un fichier de données pour chaque session d'usage, je veux que le job s'arrête lorsque la participante arrête d'utiliser l'ordinateur (poweroff ou suspend) et que le job reprenne (et produise un .csv avec un nouveau timestamp) lorsque l'utilisateur redémarre l'ordinateur ou relève le capot du portable pour le sortir de veille.

      Utilisateurices.

      C'est possible que la participante se crée un compte utilisateur différent de sysadmin. Pour prendre cette possibilité en compte, il suffit de remplacer --user par --global.
      Merci d'ailleurs pour le specifier %d!

      Dossiers

      Je trouve difficile de se retrouver dans l'ensemble des dossiers impliqués dans l'automatisation de cette collecte de données. Il y a:

      • /home/sysadmin/research qui contient l'outil de mesure, les données récoltées et le fichier de log.
      • Mais tu conseilles ~/.config/systemd/user/ pour l'outil de mesure.
      • Ailleurs, on conseille /usr/local/bin.

      Moi je veux garder le script dans le dossier /home/sysadmin/research.

      Pour les custom unit files, c'est toujours /etc/systemd/user.

      Suite

      • Je teste cette unit systemd sur une manjaro, j'espère que le comportement sera identique sur les machines testées, qui sont sous zorin 17.2.
      • Tester les cas d'usage (sortie de veille) en vérifiant qu'un fichier de donnée est bien créé.
      • Modifier l'unit monitored.service de --user à --global.
      • Commentaires, conseils après avoir lu ce retour?

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.