GNU/Linux >> Tutoriales Linux >  >> Linux

Env Vars en /etc/environment ¿No es visible globalmente?

Estoy tratando de crear un systemd servicio;

Este servicio tiene un script que se supone que usa algunas variables de entorno;

Así que creé esto:

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

Que apunta a esto

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

Lo que noté (después de algunos errores en mi systemd logs) es que tuve que explícitamente source /etc/environment

(aquí es donde se declaran las variables anteriores).

¿Por qué es necesario?

¿No son visibles globalmente?

editar :Agregar esto a la definición del servicio no resolvió el problema

Environment=/etc/environment

Respuesta aceptada:

/etc/environment no es un archivo de configuración global.

Se aplica solo en Linux; solo a las sesiones PAM, según lo empleado por login Etcétera; y solo en el caso de que un complemento PAM en particular esté instalado y habilitado en el sistema, y ​​donde ese complemento PAM no se haya configurado para usar algún otro archivo (porque /etc/environment es simplemente su valor predeterminado si no se le indica lo contrario). Es ese complemento PAM el que lo lee.

De lo contrario, es solo un archivo sin sentido en /etc que nada usa.

Mientras que podrías establecer variables de entorno globalmente en systemd-system.conf , esto se aplica a todos servicios, no solo a los que desea cambiar.

Del mismo modo, mientras que un EnvironmentFile en las unidades de servicio apropiadas es una manera de hacer que systemd lea un archivo común con una lista de definiciones de variables de entorno, la gente de systemd desaconseja su uso. Consideran EnvironmentFile como una mala idea, y su uso como un error.

La forma correcta de hacer esto según la gente de systemd es configurar cada variable en la unidad de servicio con un Environment configuración, que contiene el nombre y el valor de la variable de entorno real para establecer, no un nombre de archivo. Esto puede ser directamente en la unidad de servicio relevante, si como aquí uno está escribiendo su propia unidad de servicio para colocarla en /etc; o estar en un .conf anular el archivo, si uno está ajustando una unidad de servicio preempaquetada en /lib o /usr/lib .

Lecturas adicionales

  • https://unix.stackexchange.com/a/419061/5132
  • Lennart Poettering et al. (2016). systemd-system.conf . páginas del manual systemd. Freedesktop.org.
  • Lennart Poettering et al. (2016). systemd.exec . páginas del manual systemd. Freedesktop.org.
  • Andrew G. Morgan y Thorsten Kukuk (agosto de 2010). “pam_env — establecer/desestablecer variables de entorno“. Guía del administrador del sistema Linux-PAM . linux-pam.org.
Relacionado:Facebook:¿La pestaña de fotos no está visible en el perfil para 'Todos'?
Linux
  1. ¿Cómo se actualiza /etc/motd?

  2. ¿Hacer referencia a variables de entorno *en* /etc/environment?

  3. @reboot no funciona en CRON

  4. ¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

  5. ¿Cuál es la conexión entre los directorios /etc/init.d y /etc/rcX.d en Linux?

La forma correcta de editar archivos /etc/passwd y /etc/group en Linux

CentOS / RHEL:cómo recuperarse de un archivo /etc/passwd eliminado

Comprender los archivos /proc/mounts, /etc/mtab y /proc/partitions

/etc/passwd muestra al usuario en un grupo, pero /etc/group no

Diferencia entre /etc/hosts y /etc/resolv.conf

Cómo configurar /etc/issues para mostrar la dirección IP de eth0