El entorno de trabajo no se configura correctamente en SGE

El entorno de trabajo no se configura correctamente en SGE

Me doy cuenta de que esto podría ser difícil de responder sin que usted sepa cómo está configurado mi clúster, pero estoy intentando enviar trabajos (a través de SGE) a un clúster, pero el entorno no está configurado correctamente y los trabajos fallan. Además, hay dos nodos maestros diferentes en los que puedo iniciar sesión para enviar trabajos al mismo clúster, y mis scripts funcionan en uno pero no en el otro.

Esta es la información de la máquina para el nodo maestro en el que funciona mi script:

cat /proc/version 
Linux version 2.6.32-279.el6.x86_64 ([email protected]) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Wed Jun 13 18:24:36 EDT 2012

La máquina en la que no funciona:

cat /proc/version
Linux version 3.10.0-514.6.2.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Thu Feb 23 03:04:39 UTC 2017

Aquí hay un script de prueba que estoy usando:

#!/bin/bash -I
#$ -wd ~
#$ -N test
#$ -o ~/test.log
#$ -j y
#$ -terse
#$ -V
#$ -notify
#$ -l h_vmem=2G -pe smp 1 -l athena=true
ls
hostname
nproc

Aquí está el resultado después de ejecutar "qsub test.sh":

/bin/bash: module: line 1: syntax error: unexpected end of file
/bin/bash: error importing function definition for `BASH_FUNC_module'
/opt/sge/default/spool/execd/node156/job_scripts/1063646: line 11: ls: command not found
/opt/sge/default/spool/execd/node156/job_scripts/1063646: line 12: hostname: command not found

Para aumentar la confusión, cuando hago ssh directamente a esos nodos de trabajo (nodo156 en el ejemplo anterior), puedo ejecutar los comandos ls y hostname sin problemas.

Me puse en contacto con los administradores del clúster y no pueden replicar mi problema (incluso si inician sesión como yo). Primero probamos que si configurar ~/.bashrc y ~/.bash_profile en la configuración predeterminada lo solucionaría, pero no fue así. Aquí están esos archivos:

cat ~/.bashrc 
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

.bash_profile:

cat ~/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi


# User specific environment and startup programs

¿Alguna sugerencia?

Respuesta1

No tengo una solución completa porque no sé nada sobre SGE. Pero puedo explicar parte del problema.

La máquina donde funciona su script ejecuta una versión antigua del sistema operativo. Esto es evidente no sólo por el número de versión del kernel, sino también por el hecho de que no ha recibido actualizaciones de seguridad por un tiempo. Específicamente, creo que está ejecutando una versión de bash que es vulnerable alNeurosis de guerrabicho.

Bash (ab) usa elambientepara pasar funciones. Normalmente el entorno sólo se utiliza para pasar datos, en forma de una serie de elementos del formulario . Las versiones anteriores de bash agregan elementos del formulario , que en algunas circunstancias permitían inyectar código definiendo una variable que un script nunca usaría: elNAME=VALUENAME=() {CODE}insecto de concha. La solución al error cambió la forma en que se codifican las funciones en .BASH_FUNC_NAME%%=() {CODE}

Evidentemente, alguna parte de su configuración descarta el entorno y lo analiza. Esto puede ser parte de SGE o algo específico de su configuración. Una razón plausible para hacer esto es guardar el entorno en el que se envió un trabajo para ejecutar el trabajo en el mismo entorno.

Algo en alguna parte está definiendo una función llamada moduleen bash y exportándola. El código se vería así

module () {
}
export -f module

La solución es actualizar el analizador de entorno a algo que pueda soportar la nueva codificación bash o dejar de exportar funciones.

información relacionada