Cambiar globalmente la ruta para todos los usuarios, incluso en cron

Cambiar globalmente la ruta para todos los usuarios, incluso en cron

Estamos configurando un clúster SGE con CentOS 6. Mi administrador de sistemas está instalando aplicaciones que no se instalan a través de RPM (es decir, a través de otros medios como make install) y deben ir en un directorio no estándar, en este caso algo como /share/apps/install/bin/. La ruta para esto se agrega actualmente a la mayoría de las sesiones (iniciar sesión, qlogin, etc.) a través de /share/apps/etc/environment.shla cual se llama mediante /etc/bashrc. environment.shTambién agrega algunas cosas al PERL5LIB.

El problema con el que me encuentro es que /share/apps/install/binno se agrega a algunas instancias, por ejemplo, cosas llamadas desde un crontab.

Sé que puedo configurarlo manual y explícitamente PATH=/bin:/usr/bin:/blah/blah:...dentro de mi crontab personal o dentro de cualquier script o entrada de crontab determinado, pero lo que espero es que haya una configuración en algún lugar fuera de /etc/profileo /etc/bashrcque coloque el .../bindirectorio no estándar en todas las RUTAS para todos los usuarios. .

Respuesta1

Agrega un archivo con el valor que deseas que PATHtenga /etc/profile.d. Estos archivos están configurados para ser obtenidos por shells como Bash, Csh Zsh o tcsh.

Ejemplo

Necesitábamos tener el siguiente valor agregado a nuestro PATH.

/usr/local/share/bin

Entonces creamos un archivo /etc/profile.d/ourstuff.shcon la siguiente línea:

export PATH=/usr/local/share/bin:$PATH

Los archivos con la extensión .shprovienen de shells como Bash y Zsh. Los archivos con la extensión .cshprovienen de Csh y tcsh.

EDITAR #1 - Seguimiento

OP hizo la siguiente pregunta de seguimiento.

Sí, pero ¿qué pasa con los trabajos cron? ¿Hay alguna manera de llegar hasta allí? cron no parece llamar a /etc/profile o /etc/bashrc.

A lo que respondí:

Correcto, no lo hace ni lo hará. Debe configurar el SHELL=/bin/bashcron para anular el shell predeterminado (normalmente /bin/sh). También puede configurar esto para los crons de usuario, BASH_ENV="$HOME/.bashrc", y esto para los crones del sistema BASH_ENV="/root/.bashrc". Sería una forma de evitar esto.

Le recomiendo encarecidamente que no haga esto. Deje que los scripts que necesitan un entorno específico lo configuren ellos mismos. ¡No intentes resolver todos los problemas a nivel global!

Respuesta2

Puede colocar definiciones de variables de entorno /etc/environment(suponiendo que su sistema carguepam_envpara todos los servicios, que debería ser el valor predeterminado en todos los sistemas Linux modernos no integrados).

Tenga en cuenta que solo puede colocar definiciones de variables de entorno estáticas, del formato VARIABLE=VALUEo VARIABLE="VALUE", con una definición por línea. No puedes tener comandos de shell arbitrarios, no puedes referirte al valor de otra variable escribiendo FOO=hello+$BAR(eso pone un literal $en el valor de FOO), etc. Mientras te ciñas a asignaciones simples como PATH=/usr/local/bin:/usr/bin:/bin:/share/apps/install/bin, estarás bien. (tenga en cuenta que no puede utilizar el directorio de inicio del usuario allí: el valor debe ser el mismo para todos los usuarios).

Respuesta3

Lo que terminamos haciendo fue una solución múltiple para evitar problemas de ruta. Dependiendo del caso de uso, utilizamos uno o más de los siguientes:

  • Se utilizaron rutas absolutas a los binarios instalados en lugares no estándar en lugar de esperar que el binario estuviera en la ruta. Esto se usó para herramientas que tienen pocas, o ninguna, dependencias externas no estándar y/o que funcionan de forma aislada.
  • Creé y usé un script contenedor para una herramienta que configuró el entorno según fuera necesario; configurando manualmente PATH=... dentro de ese script y/o ejecutándolo source $HOME/.bashrcsegún corresponda. Esto se usó para herramientas que necesitaban otras herramientas, pero que de otro modo podían ejecutarse en nuestro clúster.
  • Creé un contenedor (Docker en nuestro caso) que incluye los binarios y una configuración más compleja. Esto se utilizó para herramientas que requieren un entorno significativamente diferente de nuestra configuración de clúster estándar.

información relacionada