Пакеты R (например, lubridate) не работают при вызове с Rscript в качестве задания cron - PullRequest
0 голосов
/ 16 октября 2018

Допустим, я хочу, чтобы мой компьютер вычислял мой возраст каждую минуту, поэтому я каждый день запускаю следующую задачу cron:

*/1 * * * * bash /path/to/birthCalc

birthCalc сам вызывает скрипт R, например:

#!/bin/bash 
Rscript birthCalc.R

Теперь, это все работает, если я использую базу R с такими BirthCalc.R:

birthDay <- as.POSIXct ('1919-04-15', format = '%Y-%m-%d')
age <- floor ((as.numeric (Sys.time ()) - as.numeric (birthDay))/(365.25*60*60*24))

Однако, если я пытаюсь использовать следующий скрипт с использованием библиотеки lubridate, он больше не работает.

library ('lubridate')
birthDay <- as.POSIXct ('1919-04-15', format = '%Y-%m-%d')
age <- floor (lubridate::time_length (Sys.time () - birthDay, "years"))

Если я запускаю installed.packages () внутри задания cron, в списке появляется lubridate, поэтому я предполагаю, что задание cron должно найти библиотеку.У меня была эта проблема и с другими библиотеками, но в качестве примера я выбрал lubridate.

Сценарий завершается ошибкой только при запуске в качестве задания cron.Я могу запустить его из терминала bash или в интерактивном режиме в R. Я проверил, что cron использует те же Rscript и R, а также что пакеты доступны.Чего мне не хватает?

Я работаю:

R версия 3.4.4 (2018-03-15)

Платформа: x86_64-pc-linux-gnu (64-бит) с Ubuntu 16.04.5 LTS

lubridate_1.7.4

Большое спасибо, TTR

1 Ответ

0 голосов
/ 17 октября 2018

Я нашел решение.Кажется, это было связано с разрешениями.Я изначально создал задачу cron как root и попытался создать ее для пользователя.Использование crontab -u user -e вместо sudo crontab -e решило проблему.Кто-нибудь знает, почему это было проблемой, несмотря на то, что библиотеки были установлены в доступных каталогах?

...