使用R Markdown在Cron作业中运行bash脚本

4

我想尝试从运行为Cron作业的bash脚本中渲染R markdown文件中的html内容,但除了作为Cron作业运行时,一切都正常,我不知道原因。我的做法如下:

我的脚本是来自Rstudio的演示脚本。

---
title: "test"
author: "sms"
date: "24 maja 2015"
output: html_document
---

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

```{r}
summary(cars)
```
etc.

这个脚本在Rstudio中没有问题。

接下来,我尝试从终端运行一个Rmd脚本:

Rscript -e "require( 'rmarkdown' ); render('/home/sms/Dokumenty/R/test.Rmd', 'html_document')"

没有任何问题。它可以正常工作。

因此,我创建了Bash脚本。

#!/bin/bash

Rscript -e“require('rmarkdown'); render('/home/sms/Dokumenty/R/test.Rmd','html_document')”

并且更改了chmod 755 test.sh

同样可以完美运行。

但是当放入Cron文件中(管理员和用户),就会出现问题:

28 18 * * * sh /home/sms/Dokumenty/R/test.sh

它不起作用

有什么想法我做错了什么吗?

3个回答

2

我也曾遇到同样的问题。问题是因为我以root身份运行了R脚本,但是R脚本应该以当前用户souza身份运行。为了解决这个问题,我编辑了用户souza的crontab "sudo crontab -u souza -e",现在R脚本已经以souza身份而不是root身份运行,问题得到了解决。


1

我有同样的问题。

但是如果尝试使用knitr::knit2html而不是rmarkdown::render,它会起作用。

不知道原因。


1

简化,简化,再简化。

首先,我会将其制作成一个R脚本,可能称为renderTest.R

#!/usr/bin/Rscript
library(rmarkdown)
setwd("/home/sms/Dokuments/R")
render("test.Rmd")   # I usually use default arguments

第二步,使脚本可执行(chmod 0755 renderTest.R)。
第三步,测试脚本。如果您可以像您一样运行它,则作为您运行的cron作业也应该能够运行。
第四步,将以身份运行的cron作业添加为具有相同权限的作业。 编辑:我刚刚从您那里复制并修正了一个拼写错误:Documents/而不是Documenty/

Dirk,谢谢你,当我运行你的脚本时仍然存在问题 test.sh: 3: test.sh: 语法错误:意外的单词(期望“)”) - sms
如果有帮助的话,请考虑"接受"(点击勾号)和/或"点赞"(点击向上三角形),这在 Stack Overflow 上很常见。 - Dirk Eddelbuettel
它在终端中可以运行,但是当我写下整个脚本路径时,即使我在正确的目录中 /home/sms/Dokumenty/R/test.sh哦,好的。我明白了。你的脚本是一个R脚本。 - sms
简化,简化,再简化。找出哪些命令有效,哪些无效。将注释添加到它们工作的地方,然后再添加其他内容。调试。 - Dirk Eddelbuettel
我做了一切:Rscript /home/sms/Dokumenty/R/renderTest.R,它在终端中可以工作,但是相同的命令作为cronjob时不起作用。 - sms
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接