Ошибка открытия файла при запуске Rscript как cronjob - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь запустить скрипт R как cronjob со средой conda. Запуск сценария из терминала хорошо работает, если: 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. Как я мог решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Скорее всего, вы используете среду неправильно. Конда не может быть вызвана напрямую в скрипте bash, так как он хочет использовать conda init bash для использования в оболочке.

Мне удалось сделать эту работу, выполнив следующие шаги:

# 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) оболочку, которая позволяет активировать среду 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!")

, который был передан во внешний файл.

0 голосов
/ 12 февраля 2020

Спасибо Вахверо за отличный ответ. Проблема, похоже, была в моей среде conda, поэтому воссоздание среды с вашими инструкциями решило проблему!

...