EC2スポットインスタンスでRを実行しています。スクリプトが実行されたら、インスタンスを終了してスポットリクエストをキャンセルするためにRが必要です。
そのため、「リクエストID」を/.bashrc
の環境変数に設定しました。私の計画は、スクリプトの準備ができたら、次のコードをRに呼び出すだけでした。
system("ec2-cancel-spot-instance-requests $SIR")
私が抱えている問題は、Rがenv
をRの外側から入力したときに見たのと同じ環境変数を「見ない」ため、コマンドが機能しないことです。
私は確認しましたが、環境変数を/etc/environment
に設定した場合、Rはそれらの変数を表示できますが、他の問題があります。これらの変数は動的(インスタンスIDとリクエストIDはスポットインスタンスが作成されるたびに異なる)なので、次の形式で変数を作成するスクリプトを実行しています。
export SIR=`cat /etc/ec2_instance_spot_id.txt`
そのファイルに動的IDが含まれている場所
では、「動的」環境変数を/etc/environment
に挿入するにはどうすればよいですか?または、Rに/.bashrc
の環境変数を読み取らせるにはどうすればよいですか?
正しい方向のどんなチップでも大歓迎です!
たとえば、Sys.getenv()
のようにSys.getenv("PATH")
が必要です。
またはあなたの例として、試してください
_SIR <- Sys.getenv("SIR")
system(paste("ec2-cancel-spot-instance-requests", SIR))
_
起動時の変数の設定については、help(Startup)
を参照して_~/.Renvironment
_などについて学習します。
Sys.getenv()
を使用すると、現在の環境にリストされているすべての変数が表示されます。
ただし、現在のシェルで使用されているものとは異なります。たとえば、.profileで指定されています。
Rの変数を設定するには、ホームディレクトリに.Renviron
ファイルを作成してそこに書き込みます
MYDIRECTORY="/home/wherever"
Rを再起動すると、この変数にアクセスできるようになります
Sys.getenv("MYDIRECTORY")
私はRにかなり慣れていますが、私のアプローチは次のとおりでした。プロジェクトレベルの環境変数を.env
ファイル。 Rでアクセスできるようにするために、私は
> readRenviron(".env")
次に、特定の変数にアクセスするには
> Sys.getenv("RDS_UID")
そして、それは完璧に機能しました。