【问题标题】:Crontab doesn't execute R scriptcrontab 不执行 R 脚本
【发布时间】:2017-09-07 20:14:29
【问题描述】:

我正在尝试通过添加以下行在我的系统上设置 Cron 作业

17 12 * * * Rscript ~/path/to/file/script.R > ~/output_`date +\%d\%m\%y`.txt 2>&1

然而,我看不到正在写入输出的文件。我咨询了以下答案,但无济于事:

Why did my crontab not trigger

CronJob not running

当我在终端上运行以下命令时:

Rscript ~/path/to/file/script.R > ~/output_`date +\%d\%m\%y`.txt 2>&1

我得到了预期的输出文件。我还在 crontab 中添加了以下行:

* * * * * echo hi > ~/output.txt 2>&1

它工作得很好。我不确定第一个命令有什么问题。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 如果您使用完整路径而不是使用~ 会怎样?一般来说,crontab 不理解这些,因为它的环境非常有限。
  • 我也尝试过使用完整路径。这似乎不是问题。我在另一台 ubuntu 机器上运行了同样的东西,它运行起来没有任何麻烦。
  • 你在 cron 日志中有任何痕迹吗?
  • 我在 cron 日志中只有开始、替换和结束编辑日志

标签: linux ubuntu unix cron crontab


【解决方案1】:

我通过将 crontab 中的 Rscript 替换为 /usr/local/bin/Rscript(或您的 Rscript 所在的任何地方 - 执行 which Rscript 来找出答案)来解决此问题。

【讨论】:

    【解决方案2】:

    试试下面的技巧,像下面这样创建一个脚本 script.sh -

    cat script.sh
    Rscript ~/path/to/file/script.R > ~/output_$(date +\%d\%m\%y).txt 2>&1
    

    然后在 crontab 中创建以下条目。

    17 12 * * * /bin/bash /path/to/script.sh
    

    【讨论】:

    • 为什么这样更好?您只是用$() 替换反引号。
    • @fedorqui - 替换反引号只是代码改进,诀窍是将代码移动到单独的脚本中并由 cron 执行(这是 cron 作业的理想语法)
    • 那么重要的是要突出您答案的这一方面。另外,我认为它不会按原样工作,您需要将 shebang 或在 cronjob 中指示二进制文件
    • @VIPINKUMAR 尝试根据您的技巧运行脚本,但无法使其工作。在终端上执行script.sh 工作正常,35 19 * * * bash script.sh 不行(我尝试在当地时间晚上 7.35 运行它)
    • 请提及 cron 作业中的绝对路径,像这样 - 35 19 * * * bash /home/user/script.sh
    猜你喜欢
    • 2020-03-16
    • 2013-04-19
    • 2020-05-30
    • 2020-10-19
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多