【问题标题】:Running bash script as Cron job with R Markdown使用 R Markdown 将 bash 脚本作为 Cron 作业运行
【发布时间】:2015-05-24 16:49:15
【问题描述】:

我想尝试如何从 R markdown 文件呈现 html,但从作为 Cron 作业运行的 bash 脚本呈现。我不知道为什么一切正常,除了作为 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'); 渲染('/home/sms/Dokumenty/R/test.Rmd', 'html_document')"

并更改了 chmod 755 test.sh

也像魅力一样工作。

但是当放入 Cron 文件时(管理员和用户):

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

没用

知道我做错了什么吗?

【问题讨论】:

    标签: linux r bash cron


    【解决方案1】:

    我遇到了同样的问题。 问题是因为我以 root 身份运行 Rscript,但 Rscript 应该以当前用户 souza 身份运行。 为了解决这个问题,我为用户 souza “sudo crontab -u souza -e”编辑了 crontab,并且 Rscript 以 souza 而不是 root 身份运行。 现在它正在工作

    【讨论】:

      【解决方案2】:

      简化,简化,简化。

      首先,我将其设为 Rscript,可能称为 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 作业也应该像你一样运行。

      第四,添加以身份运行的cronjob拥有相同的权限。

      编辑我刚刚修正了我从你那里复制的一个错字:Documents/ 而不是Documenty/

      【讨论】:

      • Dirk,谢谢,当我运行你的脚本 test.sh: 3: test.sh: Syntax error: word unexpected (expecting ")")
      • 如果有帮助,请考虑“接受”(单击刻度线)和/或“赞成”(单击向上的三角形),这两种方法在 Stack Overflow 上都很常见。
      • 我没有写脚本test.sh。你做到了。我建议一个名为renderTest.R的Rscript文件
      • 它在终端中工作,但是当我编写脚本的整个路径时,即使我在正确的目录 /home/sms/Dokumenty/R/test.sh 哦,好的。我懂了。您的脚本是一个 R 脚本。
      • 简化,简化,简化。找出哪些命令有效,哪些无效。注释掉,直到它们起作用,然后添加。 调试.
      【解决方案3】:

      我也有同样的问题。

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

      知道为什么

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-04
        • 2014-11-11
        • 2021-06-18
        • 1970-01-01
        • 1970-01-01
        • 2014-01-21
        • 2012-10-17
        • 2014-08-03
        相关资源
        最近更新 更多