Mar*_*ann 2 cron r pandoc r-markdown rstudio-server
在服务器上,我希望 cron 运行 R 脚本,该脚本使用 rmarkdown 呈现 HTML 页面。RStudio 服务器已安装。用户的 crontab 条目mark是:
* * * * * Rscript R/test.R >> /tmp/cron.log 2>&1
Run Code Online (Sandbox Code Playgroud)
测试.R:
library(rmarkdown)
getwd()
render("R/test.Rmd")
Run Code Online (Sandbox Code Playgroud)
该cron.log文件显示
[1] "/home/mark"
Error: pandoc version 1.12.3 or higher is required and was not found.
Execution stopped
Run Code Online (Sandbox Code Playgroud)
test.R但是,从控制台运行可以正常工作:
Rscript R/test.R
Run Code Online (Sandbox Code Playgroud)
使用符号链接pandoc添加了RStudio 服务器版本,usr/local/bin如此处所述)。检查控制台中的 pandoc 版本给出
mark@myserver:$ pandoc -v
pandoc 1.15.2
Run Code Online (Sandbox Code Playgroud)
这不是日志文件中的旧版本。此外,似乎找到了二进制文件
mark@myserver:$ which pandoc
/usr/local/bin/pandoc
Run Code Online (Sandbox Code Playgroud)
我不确定发生了什么。有任何想法吗?
这很可能/usr/local/bin已添加到您$PATH的 bash shell 中,但您的 cron 作业未在 bash 下运行,因此路径上没有 pandoc。要测试此假设,请将这些行添加到您的 R 文件中:
Sys.getenv("PATH")
Sys.which("pandoc")
Run Code Online (Sandbox Code Playgroud)
如果确实如此,您可以将 R 脚本$PATH适当地附加到,或者让 cron 在 bash shell 下运行该作业。
如果所有其他方法都失败了,您可以设置RSTUDIO_PANDOC:
Sys.setenv(RSTUDIO_PANDOC = "/usr/local/bin/pandoc")
Run Code Online (Sandbox Code Playgroud)