2012-09-06 22 views
9

Estoy ejecutando R en instancias de punto EC2 y necesito que R termine la instancia y cancele la solicitud al instante una vez que se ha ejecutado el script.¿Cómo puedo hacer que R lea mis variables ambientales?

Para que os he puesto la "Solicitud de Identificación" en una variable ambiental en /.bashrc y mi plan era simplemente llamar al siguiente código en R una vez que el guión está listo

system("ec2-cancel-spot-instance-requests $SIR") 

El problema que estoy teniendo es que R no está "viendo" las mismas variables ambientales que he visto cuando escribo env desde el exterior R, por lo que el comando no funciona.

He comprobado y si configuro mis variables de entorno en /etc/environment R puedo ver esas variables, pero este es el otro problema. A medida que esas variables son dinámicas (el ID de instancia y el ID de solicitud es diferente cada vez que se crea una instancia de punto), estoy ejecutando una secuencia de comandos para crearlos en forma de:

export SIR=`cat /etc/ec2_instance_spot_id.txt` 

Cuando ese archivo contiene la dinámica ID

Entonces, ¿cómo puedo insertar variables ambientales "dinámicas" en /etc/environment? O bien, ¿cómo puedo hacer que R lea las variables ambientales en /.bashrc?

¡Cualquier sugerencia en la dirección correcta será muy apreciada!

+0

he encontrado que las variables en ~/.profile fueron accesibles desde Sys.getenv(), pero no desde ~/.bashrc. Tuve que hacer 'source ~/.profile', luego' R' desde un terminal para que funcione luego de agregar nuevas variables. – wordsforthewise

Respuesta

9

Quiere Sys.getenv() como en Sys.getenv("PATH"), por ejemplo.

O por su ejemplo, tratar

SIR <- Sys.getenv("SIR") 
system(paste("ec2-cancel-spot-instance-requests", SIR)) 

En cuanto a la definición de variables en el arranque, consulte help(Startup) para aprender sobre ~/.Renvironment etc

+0

Muchas gracias Dirk por su tiempo. El problema que estoy teniendo es que cuando hago, por ejemplo, 'names (s <- Sys.getenv())' entonces 'SIR' no está allí, cuando hago' SIR <- Sys.getenv ("SIR") 'allí no hay nada en SIR, pero cuando salgo de R y hago 'env' esa lista de variables ambientales es totalmente diferente a la que obtengo cuando' Sys.getenv() 'y allí puedo ver SIR y otras que necesito. Echaré un vistazo a 'Renvironment', muchas gracias de nuevo. – JordanBelf

+0

OK, esto es vergonzoso. ¿Por qué quiero leer las variables ambientales en R si ya creé 2 archivos con la ID de la solicitud y la ID de la instancia? Solo puedo obtener el valor de esos archivos y realizar mi tarea ... esto no explica por qué R no estaba viendo las mismas variables ambientales que veo cuando dejo R, ¡pero voy a ponerme en marcha!Gracias por la inspiración! – JordanBelf

+4

Hice este trabajo usando 'Sys.setenv()' y básicamente copiando mis variables ambientales de fuera R a R. Aunque esto hace que mi script funcione, me gustaría poder entender por qué hay un conjunto completo de diferentes variables ambientales con R – JordanBelf

6

Usando Sys.getenv() que vea todas las variables enumeradas en el entorno actual.

Sin embargo, son diferentes de las utilizadas en su shell actual, por ejemplo, se especifican en .profile.

para establecer las variables de I crear un archivo .Renviron en su directorio y escribir allí

MYDIRECTORY="/home/wherever" 

Después de reiniciar R podrá acceder a esta variable con

Sys.getenv("MYDIRECTORY") 
Cuestiones relacionadas