当 运行 脚本通过 cron 时无法识别来自 RSudio 服务器的 pandoc

pandoc from RSudio Server not recognized when running script via cron

在服务器上,我希望 cron 到 运行 一个使用 rmarkdown 呈现 HTML 页面的 R 脚本。 RStudio 服务器已安装。用户 mark 的 crontab 条目是:

* * * * * Rscript R/test.R >> /tmp/cron.log 2>&1

test.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 

pandoc 的 RStudio 服务器版本已使用符号链接 described here 添加到 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 作业未 运行ning bash 所以路径上没有 pandoc。要测试此假设,请将这些行添加到您的 R 文件中:

Sys.getenv("PATH")
Sys.which("pandoc")

如果情况确实如此,您可以根据需要将 R 脚本附加到 $PATH,或者在 bash shell 下使用 cron 运行 作业。

如果一切都失败了,你可以设置RSTUDIO_PANDOC

Sys.setenv(RSTUDIO_PANDOC = "/usr/local/bin/pandoc")