在服务器上,我希望 cron 运行 R 脚本,该脚本使用 rmarkdown 呈现 HTML 页面。 RStudio 服务器已安装。用户 mark
的 crontab 条目是:
* * * * * Rscript R/test.R >> /tmp/cron.log 2>&1
测试.R:
library(rmarkdown)
getwd()
render("R/test.Rmd")
cron.log
文件显示
[1] "/home/mark"
Error: pandoc version 1.12.3 or higher is required and was not found.
Execution stopped
但是,从控制台运行 test.R
工作正常:
Rscript R/test.R
使用符号链接(symbolic link) described here 将 pandoc
的 RStudio 服务器版本添加到 usr/local/bin
中)。在控制台中检查 pandoc 版本给出
mark@myserver:$ pandoc -v
pandoc 1.15.2
这不是日志文件中的旧版本。此外,似乎找到了二进制文件
mark@myserver:$ which pandoc
/usr/local/bin/pandoc
我不确定发生了什么事。有什么想法吗?
最佳答案
很可能 /usr/local/bin
已添加到 bash shell 中的 $PATH
中,但您的 cron 作业并未在 bash 下运行,因此路径上没有 pandoc。要测试这个假设,请将这些行添加到您的 R 文件中:
Sys.getenv("PATH")
Sys.which("pandoc")
如果确实如此,您可以将 R 脚本适本地附加到 $PATH
中,或者让 cron 在 bash shell 下运行该作业。
如果所有其他方法都失败,您可以设置RSTUDIO_PANDOC
:
Sys.setenv(RSTUDIO_PANDOC = "/usr/local/bin/pandoc")
关于r - 通过 cron 运行脚本时无法识别来自 RSudio Server 的 pandoc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624025/