[問題] 使用 crontab 排程要執行 R 程式

看板R_Language作者 (可羅)時間8年前 (2016/03/27 02:31), 8年前編輯推噓3(3011)
留言14則, 3人參與, 最新討論串1/1
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) & linux 新手 [問題敘述]: 想要在 Linux底下用 crontab 排程 執行 R 程式 用 Rstudio 直接執行,就一切正常 但是換到用 crontab 設定排程就會產生錯誤.. 主要是說 bitops 與 XML 套件找不到...! 請問是不是要把我所需要的套件設成 R 裡面預設的套件? 除require("套件名稱") 與 library("套件名稱")之外 有其它的做法嗎? PS. 其實我有寫一個小程式來測試 crontab 來執行 R 程式, 執行結果是正常的... 以下為輸出的錯誤訊息: Loading required package: bitops Warning message: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no package called ‘bitops’ Loading required package: XML Warning message: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no package called ‘XML’ Loading required package: RCurl Warning message:In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no package called ‘RCurl’ Loading required package: DBI Loading required package: methods Loading required package: RMySQL Error in library(bitops) : there is no package called ‘bitops’ 停止執行 [環境敘述]: 請提供 sessionInfo() 的輸出結果, R version 3.2.4 Revised (2016-03-16 r70336) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 14.04.4 LTS locale: [1] LC_CTYPE=zh_TW.UTF-8 LC_NUMERIC=C LC_TIME=zh_TW.UTF-8 [4] LC_COLLATE=zh_TW.UTF-8 LC_MONETARY=zh_TW.UTF-8 LC_MESSAGES=zh_TW.UTF-8 [7] LC_PAPER=zh_TW.UTF-8 LC_NAME=C LC_ADDRESS=C [10] LC_TELEPHONE=C LC_MEASUREMENT=zh_TW.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] RMySQL_0.10.8 DBI_0.3.1 RCurl_1.95-4.8 XML_3.98-1.4 bitops_1.0-6 loaded via a namespace (and not attached): [1] tools_3.2.4 感謝各位大大 謝謝 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.206.122 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1459017111.A.CF7.html

03/27 08:42, , 1F
寫個腳本在crontab裡印.libPath
03/27 08:42, 1F

03/27 08:43, , 2F
比一下在rstudio裡的.libPath
03/27 08:43, 2F
誠如 obarisk 大大所言 在 crontab -e 下執行 .libPath()結果 [1] "/usr/local/lib/R/site-library" [2] "/usr/lib/R/site-library" [3] "/usr/lib/R/library" 在 Rstdudio 下執行 .libPath()結果 的確 crontab 少了 /home/yoyo/... 這一行 [1] "/home/yoyo/R/x86_64-pc-linux-gnu-library/3.2" [2] "/usr/local/lib/R/site-library" [3] "/usr/lib/R/site-library" [4]"/usr/lib/R/library" 請問該如何解決?

03/27 08:46, , 3F
我猜應該是權限問題 確定ㄧ下你的crontab執行跟安裝pa
03/27 08:46, 3F

03/27 08:46, , 4F
cage時的權限是ㄧ樣的
03/27 08:46, 4F
請問 swedrf0112 大大 權限是要用 sudo Rscript 嗎?... 我不太明白...不過我加了結果還是一樣... ※ 編輯: corel (1.168.215.2), 03/28/2016 07:58:51

03/28 08:23, , 5F
crontab的環境變數和你平常使用下的環境變數差超多
03/28 08:23, 5F

03/28 08:23, , 6F
我之前用的quick solution是直接在crontab中ssh自己執行
03/28 08:23, 6F

03/28 08:23, , 7F
指令,這樣可以解決很多問題(但是要開ssh server)
03/28 08:23, 7F

03/28 08:23, , 8F
其他可能的問題還有:sort的結果會不同
03/28 08:23, 8F

03/28 08:24, , 9F
.libPaths()會受到環境變數影響,細節在.libPaths的說明
03/28 08:24, 9F

03/28 08:24, , 10F
我建議你如果不想花太多時間在這件事情上面,就在crontab
03/28 08:24, 10F

03/28 08:25, , 11F
中ssh自己執行程式,否則除了這點外還可能會有其他bug
03/28 08:25, 11F
感謝 Wush978 版主大大的回應 小的剛剛想到一個很笨的方法 就是在inlcude library下 library("XML", lib.loc="指定lib安裝的路徑") 這樣可以在crontab下正常的執行 我有看過Wu大的教學影片 真是惠我良多 謝謝 ※ 編輯: corel (211.73.74.11), 03/28/2016 09:50:05

03/28 18:49, , 12F
把路徑加到path之中,或是都裝到system的路徑中
03/28 18:49, 12F

03/28 18:50, , 13F
無腦做法就是用sudo裝pkg安全做法是開.libpath的權限
03/28 18:50, 13F

03/28 18:50, , 14F
如果不會遇到版本問題的話
03/28 18:50, 14F
文章代碼(AID): #1MzjMNpt (R_Language)