Variable système pas reconnue lorsque script executé systemd

Bonjour,

J’ai fait une observation qui m’a surpris concernant les variables système personnelles.
J’ai exporté ma variable de différentes manières : bashrc, profile.d, /etc/environment

Lorsque j’execute mon script python la variable est reconnue (import os, os.environ.get()) avec toutes les méthodes ci dessus.

Cependant si le script est excuté par sudo : variable non reconnue
Si script exécuté via un service systemd également la variable est non reconnue.

Pour le service j’ai trouvé une solution qui est de déclarer la variable dans le service.d/override.conf

Pour sudo aucune solution trouvée.

Ce qui m’intéresserait c’est surtout :

  1. de savoir pourquoi lorsque le script est exécuté via systemd, la variable n’est pas reconnue sauf si déclarée dans le service lui même.
  2. Qu’est-ce que cela implique so variable déclarée dans le service et dans bashrc ou profile.d ? Possibilité de conflits ?

Merci beaucoup pour vos lumières et j’espère en apprendre un peu plus sur ces variables systèmes permanentes.

Bonjour,

L’affectation des variables d’environnement se fait au chargement du démarrage des SHELL (souvent bash). Une première partie se fait dans l’environnement système (/etc/environment) puis dans l’environnement utilisateur. Sachant que si la même variable est définie c’est le dernier qui a raison.
Un programme systemd est lancé hors session utilisateur, donc les variables utilisateur ne sont pas chargées.
Un programme sudo est executé en tant qu’un autre utilisateur, les variables définies par l’utilisateur qui lance la commande sudo ne sont donc pas prises en compte.

Pour des infos plus précises consulter ceci:
https://doc.ubuntu-fr.org/variables_d_environnement

A+

Merci beaucoup pour les liens. Tout est plus clair, je pensais que si le user qui est mentionné dans l’utilisateur qui exécute le script, le service hérite des « configurations » et droits de l’utilisateur.
J’en comprends que le seul moyen d’avoir une variable si script exécuté par systemd, est de la declarer dans le service lui même.

Bonjour,

L’affectation de variables dans le service est effectivement une solution.
Il est également possible de charger un fichier contenant les variables d’environnement.
Consulter en exemple les fichiers des services pour voir comment c’est pratiqué.

A+