r - 通过 cron 运行脚本时无法识别来自 RSudio Server 的 pandoc

标签 r cron r-markdown pandoc rstudio-server

在服务器上,我希望 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 herepandoc 的 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/

相关文章:

r - 不同大小的矩阵的相同内存使用

r - 如何在两个不同的数据帧上运行 cor.test()

java - 无法安装 cron 作业

r - 在受限环境中使用 `rmarkdown::render`

r - vim-rmarkdown 插件配置

r - 如何在 R 中与另一列进行按列除法?

r - 使用 igraph 按属性契约(Contract) vertices

ruby-on-rails - 如何在Rails docker容器中以非root用户身份执行cron任务?

python - 使用 python_crontab 计划的作业不起作用

在 Shiny 的应用程序中呈现来自 r markdown 的 html 输出