I am running R on EC2 spot instances and I need R to terminate the instance and cancel the spot request once the script has run.
For that I have set the "Request ID" into an environmental variable in /.bashrc
and my plan was to simply call the following code into R once the script is ready
system("ec2-cancel-spot-instance-requests $SIR")
The issue I am having is that R is not "seeing" the same environmental variables I seen when I type env
from outside R thus the command is not working.
I have checked and if I set my environmental variables at /etc/environment
R is able to see those variables, but here is the other problem. As those variables are dynamic (the instance ID and the request ID is different each time a spot instance is created), I am running a script to create them in the form of:
export SIR=`cat /etc/ec2_instance_spot_id.txt`
Where that file contains the dynamic ID
So, how can I insert "dynamic" environmental variables into /etc/environment
? Or, how can I make R read the environmental variables at /.bashrc
?
Any tip in the right direction will be much appreciated!
Using
Sys.getenv()
you see all variables listed in the current environment.However, they are different from those used in your current shell, for example specified in .profile.
To set the variables for R create a
.Renviron
file in your home directory and write thereAfter restarting R you will be able to access this variable with
I'm pretty new to R but my approach was this: I had project-level environment variables stored in a
.env
file. To make it accessible in R, I usedThen to access a specific variable
And it worked perfectly.
You want
Sys.getenv()
as inSys.getenv("PATH")
, say.Or for your example, try
As for setting variables at startup, see
help(Startup)
to learn about~/.Renvironment
etc