Tener un entorno de lectura de / etc / environment para un servicio

17

¿Cuál es la mejor manera de proporcionar las variables de entorno definidas en /etc/environmentun servicio inicial ?

Creo que simplemente obtenerlos .en una sección de secuencia de comandos no funciona, porque las secuencias de comandos se ejecutan por shlo que necesitaría un adicional exporten frente de cada definición ...

Nikratio
fuente

Respuestas:

16

Finalmente obtuve una respuesta en el #upstartcanal IRC. En algún momento, el advenedizo obtendrá el soporte PAM adecuado y, por lo tanto, se leerá /etc/environment. Hasta entonces, el truco es ejecutar el comando con su. suusa PAM y configurará el entorno adecuado. Ejemplo:

script 
    exec su root -c /usr/sbin/job_needing_envs
end script
Nikratio
fuente
Gracias por publicar la respuesta, me has ayudado exactamente en el mismo problema.
Maxim Veksler
error:su: must be run from a terminal
Kuf
3

Tiendo a usar eval $(cat /etc/environment | sed 's/^/export /')

Toma cada línea /etc/environment, la antepone exporty la evalúa:

script
exec /bin/bash <<'EOT'
  eval $(cat /etc/environment | sed 's/^/export /')
  do_what_you_need_to
EOT
end script
Jrgns
fuente
¿Por qué usa exec y no solo coloca la exportación directamente en el bloque de script?
Guss
1

Agregue esto a su script:

. /etc/environment
export VAR1 VAR2 VAR3

donde las variables que necesita se especifican en lugar de los marcadores de posición de estilo "VAR1".

Pausado hasta nuevo aviso.
fuente
2
De esa manera tengo que mantener manualmente la configuración advenedizo y / etc / environment en sincronía, que es (en mi opinión), no hay nada mejor que la definición de las variables dos veces ...
Nikratio
No usaría /etc/environmentpara definir todas sus variables necesarias. Déjalo como un archivo estático. En mi sistema, solo pude encontrar algunos scripts que lo usan de todos modos. Cree un archivo llamado algo así /etc/environment.localy coloque sus variables y exportaciones allí y obtenga ese archivo. Entonces solo tiene que mantener ese único archivo.
Pausado hasta nuevo aviso.
/ etc / environment es leído por pam_env.so (y no por ningún script), por lo que está disponible para cualquier inicio de sesión. Desafortunadamente, solo los programas iniciados por el sistema de arranque no tienen acceso a ese archivo por defecto.
Nikratio