2017-11-14 15 views
0

私はクラウド上でUbuntu 16.04.3 LTSを実行しています。コマンドラインからRscriptを使ってプログラムを実行すると、すべてが期待通りに実行されます。しかし、Rscriptで同じプログラムをcronで実行すると、自分の.Rprofileファイルが呼び出されないように見えます。私はこの問題を実証するための小さなプログラムを書かれている:cronで.profileが呼び出されていません

test_cron = function() { 
    #The next 3 lines are base R. 
    sink('~/test_cron.out') 
    on.exit(sink()) 
    cat('The date and time are:', as.character(Sys.time()), '\n') 
    #Now try to access a personal option, set by .Rprofile. 
    root = getOption('root') 
    cat('Option root:', root, '\n') 
} 
test_cron() 

私は、このコマンドを使用してコマンドラインからこれを実行します。

Rscript test_cron.r 

cron_test.outファイルには以下が含まれています。

The date and time are: 2017-11-14 06:15:46 
Option root: /home/ubuntu/_algi/ 

crontabの該当する行は次のとおりです。

20 6 * * * /usr/bin/Rscript ~/test_cron.r 

これはクーロンによって実行されると、cron_test.outには、次のものが含まれています

The date and time are: 2017-11-14 06:20:01 
Option root: 

明らかにcronが実行するプログラムは、私の個人的なオプション「ルート」にアクセスできませんでした。これは、私が実行した多くの実験の中の一つです.Rprofileはcronのもとでは呼び出されません。これのための修正はありますか?

注:R_PROFILE_USER環境変数は、自分の.Rprofileファイルを指すように設定されています。明らかに、cronの下のRscriptはそれを無視します。デフォルトRによって

答えて

1

を探し、ある特定の順序で3箇所に.Rprofileファイルを実行します:

  • R_HOME:Rがインストールされているディレクトリ
  • HOME:ユーザのホームディレクトリ
  • Rの現在の作業ディレクトリ

.Rprofileあなたの現在のプロジェクトで/ WDはR_HOMEを上書きしますHOMEにHOMEとR_HOMEと.Rprofileに.Rprofileを上書きします。

プロジェクト固有の起動スクリプトを作成するには、プロジェクトのルートディレクトリに.Rprofileファイルを作成するだけです。

コマンドラインからスクリプトを起動するよりも、cronによってスクリプトが起動されたときに、Rが別の.Rprofileファイルを使用しているようです。

+0

自分の.Rprofileファイルを指すようにR_PROFILE_USER環境変数が設定されていることに注意するように私の質問を編集しました。恐らくcscronのRscriptはこれを無視しています。いずれにせよ、あなたの答えは、教育的関心の間に、問題の修正を提供していないか、それが表示されない場合は表示されません。 – Argent

0

cronがユーザーの環境に負荷をかけないようになります。これは、一般的に受け入れられている解決法がなく、無限の混乱と苦痛をもたらしました。例えば、

https://serverfault.com/questions/673480/load-users-environment-variables-in-a-cronjob 
https://stackoverflow.com/questions/15557777/cron-job-does-not-get-the-environment-variables-set-in-bashrc 
https://stackoverflow.com/questions/2229825/where-can-i-set-environment-variables-that-crontab-will-use 
https://unix.stackexchange.com/questions/27289/how-can-i-run-a-cron-command-with-existing-environmental-variables 

A密接に関連する問題は.bashrcのが唯一のインタラクティブシェルで実行するということです、参照してください::

https://unix.stackexchange.com/questions/257571/why-does-bashrc-check-whether-the-current-shell-is-interactive 

私のソリューションは、私は必要な設定するシェルスクリプトを書くことです

#!/bin/bash 
export CODE_HOME='/home/ubuntu/' 
export OS='Ubuntu' 
export R_PROFILE_USER=~/R/.Rprofile 
/usr/bin/Rscript ~/test_cron.r 

スクリプトを実行可能にすると、正常にcrontabで実行されます。

関連する問題