我正在尝试自动运行存储在桌面文件夹(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文件夹中没有输出。
答案 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一起为我工作,并制作了绘图。)