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.