GNU/Linux >> Tutoriels Linux >  >> Linux

Les variables d'environnement dans /etc/environment ne sont pas globalement visibles ?

J'essaie de créer un systemd entretien ;

Ce service a un script censé utiliser certaines variables d'environnement ;

J'ai donc créé ceci :

cat /etc/systemd/system/atlantis-server.service 
[Service]
ExecStart=/usr/local/bin/atlantis-server.sh

Ce qui pointe vers ceci

[email protected]:~$ cat /usr/local/bin/atlantis-server.sh 
#!/bin/bash
source /etc/environment
atlantis server --atlantis-url="$URL" --gitlab-user="$USERNAME" --gitlab-token="$TOKEN" --gitlab-webhook-secret="$SECRET" --gitlab-hostname="$HOSTNAME" --repo-whitelist="$REPO_WHITELIST"

Ce que j'ai remarqué (après quelques erreurs dans mon systemd logs) est que je devais explicitement source /etc/environment

(c'est là que les variables ci-dessus sont déclarées).

Pourquoi est-ce nécessaire ?

Ne sont-ils pas visibles dans le monde ?

modifier :L'ajout de ceci à la définition du service n'a pas résolu le problème

Environment=/etc/environment

Réponse acceptée :

/etc/environment n'est pas un fichier de configuration global.

Il s'applique uniquement sur Linux ; uniquement aux sessions PAM, comme employé par login et ainsi de suite; et uniquement dans le cas où un plug-in PAM particulier est installé et activé sur le système, et où ce plug-in PAM n'a pas été configuré pour utiliser un autre fichier (parce que /etc/environment est simplement sa valeur par défaut si on ne lui dit pas le contraire). C'est ce plug-in PAM qui le lit.

Sinon, c'est juste un fichier vide de sens dans /etc que rien n'utilise.

Alors que vous pourriez définir les variables d'environnement globalement dans systemd-system.conf , cela s'applique à tous services, pas seulement à ceux que vous souhaitez modifier.

De même, alors qu'un EnvironmentFile dans la ou les unités de service appropriées est un moyen pour que systemd lise un fichier commun avec une liste de définitions de variables d'environnement, les personnes de systemd découragent son utilisation. Ils concernent EnvironmentFile comme une mauvaise idée, et son utilisation comme une erreur.

La bonne façon de faire cela par les personnes systemd est de définir chaque variable dans l'unité de service avec un Environment paramètre, qui contient le nom et la valeur réels de la variable d'environnement à définir, pas un nom de fichier. Cela peut être soit directement dans l'unité de service concernée, si comme ici on écrit sa propre unité de service à placer dans /etc; ou être dans un .conf fichier de remplacement, si l'on ajuste une unité de service pré-emballée dans /lib ou /usr/lib .

Autres lectures

  • https://unix.stackexchange.com/a/419061/5132
  • Lennart Poettering et al. (2016). systemd-system.conf . pages de manuel systemd. Freedesktop.org.
  • Lennart Poettering et al. (2016). systemd.exec . pages de manuel systemd. Freedesktop.org.
  • Andrew G. Morgan et Thorsten Kukuk (août 2010). "pam_env - définir/désactiver les variables d'environnement". Guide de l'administrateur système Linux-PAM . linux-pam.org.
En relation :Facebook :L'onglet Photos n'est pas visible dans le profil pour "Tout le monde" ?
Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Comment Systemd utilise-t-il les scripts /etc/init.d ?

  3. Comment /etc/motd est-il mis à jour ?

  4. @reboot ne fonctionne pas dans CRON

  5. Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

La bonne façon de modifier les fichiers /etc/passwd et /etc/group sous Linux

CentOS / RHEL :Comment récupérer à partir d'un fichier /etc/passwd supprimé

Comprendre les fichiers /proc/mounts, /etc/mtab et /proc/partitions

Quelle est la connexion entre les répertoires /etc/init.d et /etc/rcX.d sous Linux ?

Différence entre /etc/hosts et /etc/resolv.conf

Comment configurer /etc/issues pour afficher l'adresse IP pour eth0