【问题标题】:Problem with running Ruby with Cron使用 Cron 运行 Ruby 的问题
【发布时间】:2011-02-08 15:01:31
【问题描述】:

我的 ruby​​ 文件是这样的。

`mkdir #{HOST} -p`

它工作正常:ruby mycode.rb

但是在一个 cron 任务中

0 * * * * ruby​​ ~/backup.rb >> 备份.log

它将是一个-p 文件夹。为什么?

【问题讨论】:

  • 嗯,它在Cron下运行的时候是做什么的呢?当它在 cron 下运行时,它在不同的用户下运行而不是在您手动运行时运行?

标签: ruby linux cron


【解决方案1】:

任何人在使用 cron 作业时遇到的第一个问题是,出于安全原因,cron 作业通常以最小的 $PATH 运行。因此,可能您的 cron 作业运行的路径与您从 shell 运行脚本时不同,这意味着在 cron 作业中可能一个不同的mkdir comman 被调用,它以不同的方式解释它的参数。

通常,第一个文件名参数会停止选项处理,之后的所有内容都将被视为文件名。因此,由于#{HOST} 是一个文件名,之后的所有内容被视为一个文件名,这意味着调用将被解释为“创建两个目录,一个名为#{HOST},另一个命名为 -p" 如果您以 mkdir 的规范为例,在文件名之后传递选项 是非法的。

另一种可能性是,由于某种原因,#{HOST} 在 cron 下运行时会为空。然后整个调用扩展到mkdir -p,这又取决于您对mkdir 的实现可能被解释为“创建一个名为-p 的目录”。

我不太清楚为什么您以错误的顺序传递选项和操作数,而不是 mkdir -p #{HOST}。我也不清楚你为什么使用 shell,而不仅仅是 FileUtils.mkdir_p(HOST)

【讨论】:

    【解决方案2】:

    我看到的另一个问题是 #!使用 /usr/bin/env 时脚本行失败。例如:

    #!/usr/bin/env ruby

    在 cron 下运行时找不到 ruby​​。你必须使用

    #!/usr/local/bin/ruby

    或您平台上的同等产品。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多