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

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)

我不确定发生了什么。有任何想法吗?

Jon*_*han 5

这很可能/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)

  • 我终于在我的脚本中添加了`Sys.setenv(RSTUDIO_PANDOC="/usr/lib/rstudio-server/bin/pandoc")`。在职的!谢谢 (2认同)