Llenar el entorno en una sesión no interactiva

Llenar el entorno en una sesión no interactiva

Estoy trabajando en un dispositivo integrado que ejecuta Yocto Poky como distribución.

El producto final tendrá varias aplicaciones que se inician con SysVinit. Sólo hay un rootusuario.

Tengo algunos scripts, tanto en /etc/init.dcomo /etc/profile.dque agregan algunas variables de entorno que necesitan nuestras aplicaciones. El problema al que me enfrento es que, si ejecuto la aplicación "a mano" (por lo que tengo un shell interactivo), se ejecutan bien, ya que los scripts /etc/profile.d/se obtuvieron, pero cuando se ejecutan SysVinit, no pueden encontrar el entorno poblado (obviamente ). Estamos usando shcomo caparazón.

Leí sobre diferentes archivos como .bashrcy .profilealgunas variables como ENVy BASH_ENV. Intenté definir mis variables allí, pero sin suerte. Una pequeña solución que encontré fue iniciar mi aplicación principal en un shell de inicio de sesión (desde SysVinit):

2:12345:once:/bin/sh -lc /usr/bin/my_app

Entonces mis preguntas son:

  1. ¿Cómo puedo configurar el entorno durante el arranque (también conocido como sin iniciar sesión) o dejar que SysVinitlo haga de una manera agradable?
  2. Las exportaciones realizadas en /etc/init.dscripts no se propagan a mi entorno en absoluto; eso se debe a que esos scripts se ejecutan en un subshell y no se originan en el actual (eso requerirá iniciar sesión dos). Supongo, entonces, ¿cómo puedo exportar variables desde allí?
  3. ¿Es mi solución una solución válida?

Respuesta1

  1. ¿Cómo puedo configurar el entorno durante el arranque (es decir, sin iniciar sesión) o dejar que SysVinit lo haga de una manera agradable?

Durante el arranque, el entorno está limpio (no se inicializa el jet). Necesita poner variables env a través de comandos sourceo (si su servicio es un script) o inicializarlo en el programa (es decir, mediante un archivo de configuración)..sh

Pequeño ejemplo de encabezado de script de servicio:

#!/bin/bash

[ -f /etc/profile.d/needed.sh ] && . /etc/profile.d/needed.sh

. . .
  1. Las exportaciones realizadas en los scripts /etc/init.d no se propagan a mi entorno en absoluto, eso se debe a que esos scripts se ejecutan en un subshell y no se originan en el actual (para eso será necesario iniciar sesión dos veces), supongo, entonces, ¿cómo puedo ¿Exporto variables desde allí?

sourcesus variables de entorno para subshells o llame a comandos con la variable de entorno especificada.

Pequeño ejemplo de encabezado de script de servicio:

#!/bin/bash

. . .

$(BASH_ENV=/etc/profile.d/needed.sh command)
$(ENV_VAR1=value1 command)

. . .
  1. ¿Es mi solución una solución válida?

Si es trabajo, es un camino sucio para el servicio. Ver 1. y 2.

información relacionada