运行 Rscript 作为 cronjob 时文件打开错误
File opening error while running Rscript as cronjob
我正在尝试 运行 将 R 脚本作为具有 conda 环境的 cronjob。 运行 来自终端的脚本适用于以下 script.sh
/opt/anaconda/anaconda3/envs/{env-name}/bin/Rscript '/ABSOLUTE_PATH/script.R' >> '/ABSOLUTE_PATH/script.log' 2>&1
但是,当将 crontab -e
中的作业定义为
30 14 * * * /ABSOLUTE_PATH/script.sh
结果
Error: package or namespace load failed for 'tidyverse' in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/opt/anaconda/anaconda3/envs/admenv/lib/R/library/stringi/libs/stringi.so':
libicui18n.so.58: cannot open shared object file: No such file or directory
Execution halted
我已经尝试运行它作为
/opt/anaconda/anaconda3/envs/{env-name}/bin/R '/ABSOLUTE_PATH/script.R' >> '/ABSOLUTE_PATH/script.log' 2>&1
source /opt/anaconda/anaconda3/bin/activate {env-name}; Rscript '/ABSOLUTE_PATH/script.R' >> '/ABSOLUTE_PATH/script.log' 2>&1
所有这些都导致了与 cronjob 相同的错误。
在 conda conda remove r-tidyverse; conda install -c r r-tidyverse
中重新安装软件包没有帮助。
使用的 R 版本是 3.6.2 和 Anaconda 4.8.2。我该如何解决这个问题?
你很可能是错误地使用了环境。无法在 bash 脚本中直接调用 Conda,因为它想使用 conda init bash
以在 shell.
中使用
我通过以下步骤成功完成了这项工作:
# Create the enviroment to be used
conda create -n r-env r-base r-essentials <other packages, for example r-tidyverse r-dbi>
接下来创建 script.sh
:
conda activate r-env
Rscript <ABSOLUTE_PATH>/script.R
然后将 cronjob 作为交互式调用(-i
选项)shell,这样可以激活 conda 环境。
# You can use obliviously any time you like
* * * * * bash -i <ABSOLUTE_PATH>/script.sh <any error streams>
使用 R 脚本测试
library(tidyverse)
library(DBI)
library(ggplot2)
print("Hello world!")
通过管道传输到外部文件。
感谢 vahvero 的精彩回复。问题似乎出在我的 conda 环境中,所以只需按照您的说明重新创建环境即可解决问题![=10=]
我正在尝试 运行 将 R 脚本作为具有 conda 环境的 cronjob。 运行 来自终端的脚本适用于以下 script.sh
/opt/anaconda/anaconda3/envs/{env-name}/bin/Rscript '/ABSOLUTE_PATH/script.R' >> '/ABSOLUTE_PATH/script.log' 2>&1
但是,当将 crontab -e
中的作业定义为
30 14 * * * /ABSOLUTE_PATH/script.sh
结果
Error: package or namespace load failed for 'tidyverse' in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/opt/anaconda/anaconda3/envs/admenv/lib/R/library/stringi/libs/stringi.so':
libicui18n.so.58: cannot open shared object file: No such file or directory
Execution halted
我已经尝试运行它作为
/opt/anaconda/anaconda3/envs/{env-name}/bin/R '/ABSOLUTE_PATH/script.R' >> '/ABSOLUTE_PATH/script.log' 2>&1
source /opt/anaconda/anaconda3/bin/activate {env-name}; Rscript '/ABSOLUTE_PATH/script.R' >> '/ABSOLUTE_PATH/script.log' 2>&1
所有这些都导致了与 cronjob 相同的错误。
在 conda conda remove r-tidyverse; conda install -c r r-tidyverse
中重新安装软件包没有帮助。
使用的 R 版本是 3.6.2 和 Anaconda 4.8.2。我该如何解决这个问题?
你很可能是错误地使用了环境。无法在 bash 脚本中直接调用 Conda,因为它想使用 conda init bash
以在 shell.
我通过以下步骤成功完成了这项工作:
# Create the enviroment to be used
conda create -n r-env r-base r-essentials <other packages, for example r-tidyverse r-dbi>
接下来创建 script.sh
:
conda activate r-env
Rscript <ABSOLUTE_PATH>/script.R
然后将 cronjob 作为交互式调用(-i
选项)shell,这样可以激活 conda 环境。
# You can use obliviously any time you like
* * * * * bash -i <ABSOLUTE_PATH>/script.sh <any error streams>
使用 R 脚本测试
library(tidyverse)
library(DBI)
library(ggplot2)
print("Hello world!")
通过管道传输到外部文件。
感谢 vahvero 的精彩回复。问题似乎出在我的 conda 环境中,所以只需按照您的说明重新创建环境即可解决问题![=10=]