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 gUI (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:
~/.config/systemd/user/
--user
:systemctl --user enable toto.service
systemctl --user restart toto.service
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 leyouki (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.~/.config/systemd/user/
pour l'outil de mesure./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
--user
à--global
.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.