Méthode propre et puissante pour tester, profiler et sandboxer les programmes

Partagez ici vos Trucs et vos Astuces.
Répondre
DebDynamiX
Membre
Membre
Messages : 21
Inscription : 16 oct. 2025, 23:31
Status : Hors-ligne

Je ne sais pas si vous connaissez, le service transient systemd de Debian. Comme je l'utilise beaucoup et ce matin encore, j'ai voulu partager cette astuce avec vous.

il me permet de tester, profiler et sandboxer mes programmes, script ou autres logiciels, sans compromètre mon système et ecriture dans /etc/systemd/system. Je peux y configurer librement toutes les propriétés systemd comme le CPU, la mémoire, le sandboxing, les variables d’environnement, cgroups, etc… ainsi qu'ajustées dynamiquement l'ensemble dans cet espace dédié.

fonction de base, exemple:

Code : Tout sélectionner

systemd-run --unit=[label_unit_temporaire] [PATH_VERS_VOTRE_APP]
1. limiter le CPU:

Code : Tout sélectionner

systemd-run --unit=[label_unit_temporaire] --property=CPUQuota=40% [PATH_VERS_VOTRE_APP]
2. limiter la RAM:

Code : Tout sélectionner

systemd-run --unit=[label_unit_temporaire] --property=MemoryMax=300M [PATH_VERS_VOTRE_APP]
3. Varibales d'environements:

Code : Tout sélectionner

systemd-run --unit=[label_unit_temporaire] --setenv=CI=true --setenv=MODE=test [PATH_VERS_VOTRE_APP]
4. Sanboxiing:

Code : Tout sélectionner

systemd-run --unit=[label_unit_temporaire] --property=ProtectSystem=strict --property=PrivateTmp=yes --property=NoNewPrivileges=yes [PATH_VERS_VOTRE_APP]
5. cgroup dédié:

Code : Tout sélectionner

systemd-run --unit=[label_unit_temporaire] --property=CPUAccounting=yes  --property=MemoryAccounting=yes [PATH_VERS_VOTRE_APP]
6. Shell interactif pour debugger les app:

Code : Tout sélectionner

systemd-run -t --property=MemoryMax=500M bash
Vous pouvez egalement generer un servie permanent a partir de cela. Vous avez en gros sur plusieurs ligne de comandes que j'utilise le plus souvent. Vous pouvez l'adapter selon vos besoin.


Pour retrouver le service activé, j'utilise deux commandes:

soit:

Code : Tout sélectionner

systemctl status run-*.service
soit:

Code : Tout sélectionner

systemctl status $(systemctl list-units --type=service | grep run- | awk '{print $1}')
Une fois que vous avez trouvé ce qui vous convient le mieux vous pouvez le gerer plus facilement dans .bashrc avec une fonction et/ou alias.

J’espère que ça vous apportera quelque chose, parce que ce n’est pas encore très répandu. De mon côté, j’adore vraiment travailler comme ça. j’en suis vraiment très fan.


---

J'ai oublié de mentionner les arrets:

Verif toujours en RAM:

Code : Tout sélectionner

systemctl status [label_unit_temporaire].service
L'arret de l'unité:

Code : Tout sélectionner

sudo systemctl stop [label_unit_temporaire].service
Suppression:

Code : Tout sélectionner

sudo systemctl reset-failed [label_unit_temporaire].service
Au redemarrage tout disparait.
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 6397
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

OK , merci pour l'info.
Quel intérêt par rapport à un container (linux ou microservice) ?
Répondre