CRON未执行R脚本文件

时间:2019-04-06 09:39:25

标签: r cron

我正在尝试自动运行存储在桌面文件夹(cron_test)中的R中的脚本(test.R)。我在Mac终端中使用CRON。示例R脚本生成随机数,将其绘制并保存为PDF:

setwd("~/Desktop/cron_test")

pdf("example_plot.pdf", width = 8, height = 8)
plot(rnorm(100))
dev.off()

我的CRON代码尝试每分钟调用一次,但是文件夹中没有任何内容:

* * * * * Rscript /Users/username/Desktop/cron_test/test.R

什么都没有生成。我尝试了以下方法:

  • 如果我从终端调用该文件,则该文件运行正常,这表明代码没有问题:

    Rscript /Users/username/Desktop/cron_test/test.R

  • 我还确保(并仔细检查)文件的权限具有可执行权限,如this proposed answer to a similar issue

    chmod 777 /Users/username/Desktop/cron_test/test.R

  • 我还尝试了该答案中另一个建议的解决方案,即创建一个调用R脚本的shell文件。这也不起作用。

我收到邮件以表明CRON任务已运行,但是cron_test文件夹中没有输出。

1 个答案:

答案 0 :(得分:2)

邮件说

/bin/sh: Rscript: command not found

如果是,请尝试使用Rscript的完整路径。您可以使用

从终端找到它
$ which Rscript

这样做的原因是,与交互式终端相比,在cron会话中获得的环境要小得多。您可以通过比较

的输出来检查
$ /usr/bin/env > env-interactive

和cron工作

* * * * * /usr/bin/env > env-cron

通过计算每个文件中的行数,我们可以看到这些完全不同。

$ wc -l env-{interactive,cron}
      20 env-interactive
       8 env-cron

尤其是cron作业中的shell可执行文件搜索路径($PATH)短得多

$ grep PATH env-{interactive,cron}
env-interactive:PATH=/Users/hpcchris/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/opt/X11/bin:/Applications/Wireshark.app/Contents/MacOS:/Users/hpcchris/bin
env-cron:PATH=/usr/bin:/bin

(使用完整路径/usr/local/bin/Rscript和macOS High Sierra笔记本电脑上的R一起为我工作,并制作了绘图。)