GNU/Linux >> Znalost Linux >  >> Linux

Proměnné Env v /etc/environment nejsou globálně viditelné?

Snažím se vytvořit systemd služba;

Tato služba má skript, který má používat některé proměnné prostředí;

Tak jsem vytvořil toto:

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

Což na to poukazuje

[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"

Čeho jsem si všiml (po některých chybách v mém systemd logs) je, že jsem musel explicitně source /etc/environment

(zde jsou deklarovány výše uvedené proměnné).

Proč je to potřeba?

Nejsou globálně viditelné?

upravit :Přidání tohoto do definice služby problém nevyřešilo

Environment=/etc/environment

Přijatá odpověď:

/etc/environment není globální konfigurační soubor.

Platí pouze na Linuxu; pouze k relacím PAM, jak to používá login a tak dále; a pouze v případě, že je v systému nainstalován a povolen určitý zásuvný modul PAM a tento zásuvný modul PAM nebyl nakonfigurován pro použití jiného souboru (protože /etc/environment je pouze výchozí, pokud není uvedeno jinak). Je to zásuvný modul PAM, který to čte.

Jinak je to jen nesmyslný soubor v /etc že nic nepoužívá.

Zatímco mohli nastavit proměnné prostředí globálně v systemd-system.conf , to platí pro všechny služby, nejen ty, které chcete změnit.

Podobně, zatímco EnvironmentFile v příslušné servisní jednotce (jednotkách) je způsob, jak nechat systemd přečíst společný soubor se seznamem definic proměnných prostředí, lidé ze systemd jeho použití odrazují. Týkají se EnvironmentFile jako špatný nápad a jeho použití jako omyl.

Správný způsob, jak to udělat podle lidí ze systému, je nastavit každou proměnnou v servisní jednotce pomocí Environment nastavení, které obsahuje skutečný název a hodnotu proměnné prostředí nastavit, nikoli název souboru. To může být buď přímo v příslušné servisní jednotce, pokud jako zde zapisujete vlastní servisní jednotku, která se má umístit do /etc; nebo být v .conf override file, pokud upravujete předem zabalenou servisní jednotku v /lib nebo /usr/lib .

Další čtení

  • https://unix.stackexchange.com/a/419061/5132
  • Lennart Poettering a kol. (2016). systemd-system.conf . systémové manuálové stránky. Freedesktop.org.
  • Lennart Poettering a kol. (2016). systemd.exec . systémové manuálové stránky. Freedesktop.org.
  • Andrew G. Morgan a Thorsten Kukuk (srpen 2010). „pam_env — nastavení/zrušení proměnných prostředí“. Příručka správce systému Linux-PAM . linux-pam.org.
Související:Facebook:Karta Fotky není v profilu viditelná pro „Všichni“?
Linux
  1. @reboot nefunguje v CRON

  2. /etc/passwd zobrazuje uživatele ve skupině, ale /etc/group nikoli

  3. Měly by weby žít ve /var/ nebo /usr/ podle doporučeného použití?

  1. Zahrnout název domény nebo ne do /etc/hosts?

  2. Rozdíl mezi ~/.profile, ~/.bashrc, ~/.bash_profile, ~/.gnomerc, /etc/bash_bashrc, /etc/screenrc …?

  3. Jak se aktualizuje /etc/motd?

  1. Kdy mám použít /dev/shm/ a kdy /tmp/?

  2. Jaké je spojení mezi adresáři /etc/init.d a /etc/rcX.d v Linuxu?

  3. pomocí časovačů systemd místo cronu