【问题标题】:CRON not executing R script fileCRON 不执行 R 脚本文件
【发布时间】:2019-08-28 02:06:44
【问题描述】:

我正在尝试自动运行存储在桌面文件夹 (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 文件夹中没有出现任何输出。

【问题讨论】:

    标签: r cron


    【解决方案1】:

    邮件说

    /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 为我工作并制作了情节。)

    【讨论】:

    • 奇怪的是,这封电子邮件根本没有产生任何错误。一切似乎都运行良好。但是,如果我在我的 cron 调用前面添加实用程序 Rscript(我通过您推荐的哪个 Rscript 找到)的完整路径,那么它可以正常工作!所以,我用过: * * * * /anaconda3/bin/Rscript /Users/username/Desktop/cron_test/test.R 它工作得很好。 (我不确定为什么实用程序 Rscript 在那里,但这是一个不同的线程......)。感谢您的帮助!